异步双向RPC
我在找一个可以在Java或Python(更倾向于Python)中使用的RPC库,要求是基于TCP的。它应该支持:
- 异步处理
- 双向通信
- 远程过程调用(RPC)
- 某种事件循环(带回调或类似的功能)
有没有什么推荐的?我看过一些像bjsonrpc的东西,感觉差不多,但似乎服务器无法识别哪些连接;也就是说,如果一个用户已经登录,而另一个用户发来请求想给这个用户发送消息,服务器就无法找到那个用户的连接,这样就无法发送消息了。
4 个回答
1
我是bjsonrpc的作者。我相信你想做的事情是可以实现的。
不过,有些地方的文档可能写得不太清楚,或者需要一些示例。
简单来说,处理器可以存储内部状态(比如用户是否已认证,或者用户名是什么)。从任何处理器中,你都可以访问“连接”类,这个类包含了实际的socket。
看起来你想要一个聊天的例子。我之前做过类似的事情。我会尽量在新版本中添加一个聊天示例。
关于内部状态的解释可以在这里找到:http://packages.python.org/bjsonrpc/tutorial1/index.html#stateful-server
这些状态应该用于认证(不过目前还没有提供标准的认证方法)。
至于如何从处理器访问连接类,这部分还没有文档(抱歉),但在源代码中的一些示例里有用到。例如,example1-server.py里包含了这个公共函数:
def gettotal(self):
self._conn.notify.notify("total")
return self.value_total
BaseHandler._conn代表了该用户的连接。它和你连接时得到的类是完全一样的:
conn = bjsonrpc.connect(host=host,port=port,handler_factory=MyHandler)
所以,你可以把已登录用户的连接存储在一个全局变量中,之后可以随时调用你想要的任何客户端方法。