pyzmq上的双向rpc api

pseud的Python项目详细描述


Travis-CI StatusCoverage StatusDocumentation Status

pythonic双向rpc api构建在可插拔mq之上 加密、身份验证和令人心碎的支持。

功能

  1. MQ传输层。
  2. 支持所有本地python类型(msgpack)。
  3. 第一公民例外。
  4. 双向(服务器可以启动对连接的客户端的调用)。
  5. 基于曲线的加密。
  6. 可插拔身份验证。
  7. 可插拔的心跳。
  8. 可插拔远程呼叫路由。
  9. 内置代理支持。服务器可以将工作委托给另一个服务器。
  10. syncclient(使用zmq.req)在非基于事件的进程中使用。 (不支持心跳、身份验证和作业执行 同步客户端。)

安装

$ pip install pseud

执行

服务器

frompseudimportServerserver=Server('service')server.bind('tcp://127.0.0.1:5555')@server.register_rpcdefhello(name):return'Hello {0}'.format(name)awaitserver.start()# this will block forever

客户

frompseudimportClientclient=Client('service',io_loop=loop)client.connect('tcp://127.0.0.1:5555')# Assume we are inside a coroutineasyncwithclient:response=awaitclient.hello('Charly')assertresponse=='Hello Charly'

同步客户端

# to use within a non-asynchronous process or in a command interpreterfrompseudimportSyncClientclient=SyncClient()client.connect('tcp://127.0.0.1:5555')assertclient.hello('Charly')=='Hello Charly'

服务器向客户端发送命令

需要注意的是,服务器需要知道 同级连接到它。 这就是为什么安全插件trusted_peer很方便。 它将注册所有对等ID,并能够将消息路由到每个对等ID。

frompseudimportServerserver=Server('service',security_plugin='trusted_peer')server.bind('tcp://127.0.0.1:5555')@server.register_rpcdefhello(name):return'Hello {0}'.format(name)awaitserver.start()# this will block forever

客户端需要将其标识发送到服务器。这就是为什么plain 使用安全插件。服务器不会检查密码,他只会 要执行路由,请考虑用户id。

frompseudimportClientclient=Client('service',security_plugin='plain',user_id='alice',password='')client.connect('tcp://127.0.0.1:5555')# Action that the client will perform when# requested by the server.@client.register_rpc(name='draw.me.a.sheep')defsheep():return'beeeh'

回到服务器端,我们可以向它发送客户端能够执行的任何命令。

# assume we are inside a coroutinesheep=awaitserver.send_to('alice').draw.me.a.sheep()assertsheep=='beeeh'

文档

Pseud on Readthedocs

版权所有2014 Ezeep GmbH

根据apache许可证2.0版(以下简称“许可证”)授权; 除非符合许可证,否则您不能使用此文件。 您可以在

http://www.apache.org/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则软件 根据许可证分发是按“原样”分发的, 无任何明示或默示的保证或条件。 有关管理权限的特定语言和 许可下的限制。

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

推荐PyPI第三方库


热门话题
java如何在导航抽屉中显示图像   DDD中的java聚合对象   java如何在登录后隐藏主活动上的项目?   java如何知道MouseWheelListener是否可以接收事件?   java地图中未显示新标记   Z3Java绑定是否具有与python相同的get_vars()API?   java重置或清除Lucene索引   Java骑士之旅代码   集合Java类树集合中的Java方法headSet和tailSet在日志(N)时间内工作吗?   java从SpringWeb服务获取Jetty实例   java需要在jira中将jsp文件更改为vm文件   创建对象时发生java IllegalMonitorStateException   java SnakeYaml从字符串第一行转储   使用java在文件中逐个使用for循环写入行