ZeroMQ上的JSON-RPC2.0库

jsonrpc2-zeromq的Python项目详细描述


Travis build status

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!')

还包括NotificationOnlyPullServerNotifierOnlyPushClient,它们设计用于通过推拉套接字单向发送通知。

还有一个客户机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。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在JAVA中使用带有compareTo的双分派?   java Android应用程序在更改方向时崩溃   java如何使用Spring security将经过身份验证的用户的ip地址保存到DB?   java每隔一段时间检查文件,直到超时值过期   Linux中的Java弹出触发器   java使用LDAP对特定请求的凭据进行身份验证   java如何在intellij中运行spring启动应用程序?   java测试不读取属性文件的值   以矩阵格式java打印2d数组   如何在Java中将无效的JSON字符串转换为JSONObject?   使用CompletableFuture在Java中使用多线程基本WebCrawler返回emptyresponse   java POM,用于压缩项目