ZeroMQ上的JSON-RPC2.0库
jsonrpc2-zeromq的Python项目详细描述
由Dan Brown编写。有关许可信息,请参阅许可证文件。
这是python中的一个库,在ZeroMQ上启用JSON-RPC 2.0。它包括对客户端和服务器的支持。
这是一个标准的python项目,所以只需使用python setup.py install或使用pip安装。
支持Python2.7和3.3+。
服务器
from jsonrpc2_zeromq import RPCServer class EchoServer(RPCServer): def handle_echo_method(self, msg): return msg s = EchoServer("tcp://127.0.0.1:57570") s.run()
这将创建一个在zeromq rep套接字上侦听的服务器,因此只允许使用方法,而不允许使用通知。也可以查看RPCNotificationServer,它将监听路由器套接字并允许通知。
每台服务器都是一个python Thread,因此对run()的调用可以替换为start(),使其在后台线程中运行。
客户
from jsonrpc2_zeromq import RPCClient c = RPCClient("tcp://127.0.0.1:57570") print c.echo("Echo?") # Assuming the above compliant server, should print "Echo?"
有不同的类,假设json-rpc 2.0和zeromq特性不同。例如,上面的代码将把一个req套接字连接到给定的端点。
通知
给定一个接受通知的服务器:
from jsonrpc2_zeromq import RPCNotificationServer class EventReceiver(RPCNotificationServer): def handle_event_method(self, event_type, event_data): print "Got event!\nType: {0}\nData: {1}\n".format(event_type, event_data) s = EventReceiver("tcp://127.0.0.1:60666") s.run()
然后您可以发送通知:
from jsonrpc2_zeromq import RPCNotifierClient c = RPCNotifierClient("tcp://127.0.0.1:60666") c.notify.event('birthday!', 'yours!')
还包括NotificationOnlyPullServer和NotifierOnlyPushClient,它们设计用于通过推拉套接字单向发送通知。
还有一个客户机NotificationReceiverClient,它能够处理从服务器返回给它的通知。这对于通过标准rpc调用“订阅”来自服务器的事件并在事件发生时作为通知返回给客户端的情况非常有用。此模式当前没有对应的服务器类。下面是一个(单面)示例:
from jsonrpc2_zeromq import NotificationReceiverClient class EventSubscriber(NotificationReceiverClient): def handle_event_notification(self, event_type, event_data): print "Got event!\nType: {0}\nData: {1}\n".format(event_type, event_data) c = EventSubscriber("tcp://127.0.0.1:60666") c.subscribe() c.wait_for_notifications()
日志记录
standard Python logging module用于日志记录。默认情况下它不输出任何内容。使用logging.getLogger('jsonrpc2_zeromq')检索内置库记录器,或者使用logger关键字参数将您自己的Logger实例传递到客户端或服务器的__init__。
目前有一些有用的消息在DEBUG级别输出,在ERROR上有服务器异常,在INFO上有服务器启动消息。
测试
包括测试。在项目根目录中运行python setup.py test。
历史记录
- 2.0
- python 3.3+支持
- 1.1.2
- 允许更新的(v14)pyzmq。
- 不要在服务器recv循环中提高eintr。