我的设置有一个节点.js生成子进程,它使用Python对象创建一对双向ZeroRPC会话。在
python方面与此类似:
class MyClass:
def __init__(self, socketpath):
self.client = zerorpc.Client()
self.client.connect(socketpath)
def sendtoclient(self, msg):
self.client.receiveMessage(msg)
if __name__ == '__main__':
zpc = zerorpc.Server(MyClass(sys.argv[1]))
zpc.bind(sys.argv[1] + "_python")
zpc.run()
在节点.js子客户机可以调用Python服务器上的方法,但该服务器中的客户机不能在节点.js子服务器没有得到异常:
^{pr2}$Python类中的客户机是否需要作为gevent派生,然后在需要时调用其receiveMessage
方法?或者我忽略了其他的把戏吗?在
经过一番试验,Gevent文档中的一些例子给出了一个可行的解决方案。我采用的解决方案是创建一个gevent队列,从服务器端填充并在循环中从单独的Greenlet输出。所以在我的服务器文件中,我添加了:
在
MyClass
中,它的初始化更改为将对队列的引用保留为self.outbox
(实际上,我可以在每次访问它时使用global)。当需要发送异步消息时,MyClass
调用self.outbox.put(messages)
。在然后在下面创建ZeroRPC实例时,我生成了每个实例:
^{pr2}$这样做解决了我的问题作为一个概念的证明。在
相关问题 更多 >
编程相关推荐