用于python应用程序和微服务的wamp-rpc和pub/sub
wamp的Python项目详细描述
…-*-模式:rst-*-
travis python27 python34 python35 python36
|特拉维斯图片:https://travis-ci.org/noisyboiler/wampy.svg?分支=主
…_特拉维斯:https://travis ci.org/noisyboiler/wampy
…| python27图像::https://img.shields.io/badge/python-2.7-blue.svg
…_ python27:https://pypi.python.org/pypi/wampy/
…| python34图像::https://img.shields.io/badge/python-3.4-blue.svg
…_ python34:https://pypi.python.org/pypi/wampy/
…| python35图像::https://img.shields.io/badge/python-3.5-blue.svg
…_ python35:https://pypi.python.org/pypi/wampy/
…| python36图像::https://img.shields.io/badge/python-3.6-blue.svg
…_ python36:https://pypi.python.org/pypi/wampy/
**
**
wampy
**
*[whomp ee]*
……引述:
有关wamp是什么的背景信息,请参见"here`.
应用程序执行异步。**wampy**是"高速公路"的轻量级替代品。
消息传送。
有关更详细的文档,请参见"readthedocs"。
~~~~~~~~~~~~~~~~
-通过websockets进行远程过程调用
-通过websockets发布和订阅
-客户端身份验证
-传输层安全性
-clilopment
-测试项目时要使用的pytest fixture
-nameko戋与nameko戋wamp戋的集成
-flask戋与flask戋wamp戋的集成
-可配置和可扩展的异步后端(beta)
快速启动-连接并开始!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果您已经访问了一个正在运行的**路由器**,该路由器已连接了其他**对等点**,请留在这里。如果没有,跳到下一节。如果你还在这里……
::
……然后打开一个python shell。
hat过程。
::
从wampy.peers导入client
使用client()作为client:
response=client.rpc.get庘foobar()
使用此处的响应执行一些操作
r/>从wampy.peers导入客户端
它是客户端实例的作用域。
请参阅"readthedocs"以了解更多有关此的详细信息。
运行并调用wampy应用程序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~然后,消息在**客户端**之间通过**路由器**上名为**域**的管理域进行路由。
对于最快的启动,我建议您使用**crossbar.io**并在默认主机和端口上启动,并使用默认的**域**和**角色**。请参阅"crossbar.io docs"以获取有关此操作的说明,或者使用**wampy的**测试设置运行此操作。
::
$pip install--可编辑。[dev]
$crossbar start--config./wampy/testing/config s/crossbar.json
wampy rpc
~首选文本编辑器,我们将编写几行python构造一个简单的**wamp**服务,它接受一个十进制数并返回它的二进制表示形式-wowzers!
::
从wampy.peers.clients导入client
从wampy.roles导入被叫方
类binaryNumberService(client):
@callee
定义获取二进制数(self,number):
返回二进制数(number)
您的python路径,我们将使用一个**wampy**命令行界面工具来启动服务。
::
$wampy run path.to.your.module.including.module廑name:binaryNumberService
例如,针对previ建议的路由器运行一个**wampy**示例应用程序。ly:
:::
$wampy run docs.examples.services:dateservice--config./wampy/testing/configs/crossbar.json
"`binarynumberservice`"示例已经存在于**wampy**示例中,因此如果您愿意,请将该文本编辑器放在一边。只需从命令行执行:
::
$wampy run docs.examples.services:binarynumberservice--config./wampy/testing/configs/crossbar.json
rminal(但完成后需要"ctrl-c"。
:
,[1]:从wampy.peers.clients导入client
,[2]:以client(url="ws://localhost:8080")作为client:
result=client.rpc。在[3]:res中获取二进制数(number=100)
结果
out[3]:u'0b1100100'
他的理由还有一个"callproxy"对象,它通过更松散地包装**wampy的**``call``消息来实现``call``api。在这种模式中,应用程序及其终结点由点分隔字符串而不是单个api名称标识,例如
::
"com.example.endpoint"
就像"rpc"api一样,"call"api在每个**wampy**客户端上都是直接可用的。让我们一起来看看这两个例子。
::
>;>client.rpc.get掴foo掴bar(eggs,foo=bar,spam=ham)
>;>client.call("get掴foo掴bar",eggs,foo=bar,spam=ham)
``调用"api"的行为更像是一个经典的**crossbar.io**应用程序,而"rpc"将用于nameko wamp。
the"call"api却允许使用以下形式的调用:client.call("com.myapp.foo.bar",eggs,foo=bar,spam=ham)
我无法使用"rpc"api。
您可以在python模块中自己创建一个(作为**wampy**``client``的子类),也可以使用已经在``docs.examples.services``中为您提供的示例``client``.
这里我们使用的是上述示例服务,但是**订阅者**只是一个带有b修饰方法的**wampy**``client``是"订阅"。让我们启动这个示例服务。
r/>
在另一个终端中,使用**wampy**虚拟机,您可以创建一个**发布服务器**-这与任何其他**wampy**客户端没有区别。
:
:
/>result=client.publish(topic="foo",message="spam")
希望您在运行示例服务的屏幕上看到您发送的任何消息。您还将看到**wampy**选择发送的元数据。
请注意。**wampy**相信显式的"kwargs",而不是裸的"args",因此只能发布关键字参数。简单的参数不能告诉读者关于这个调用的足够信息,所以即使**wamp**支持它们,**wampy**不支持它们。
)例如,
:
in[1]:从wampy.peers导入客户端
in[2]:以client()作为客户端:
client.publish(
topic="foo",
ham="spam",
birds={foo-bird':1,'bar-bird':2},
message="hello world",
)
很高兴在此探索如何支持"autobahn"等实现。
当前的扩展是:
-`flask wamp`\u
-`nameko wamp`\u
鼓励对其他python框架进行扩展!
**************
async networking
**************
async networking的默认后端是**gevent**,但如果您的应用程序已经在使用此后端,则可以将其切换到**eventlet**。
::
后退很简单。
::
$export wampy_async_name=gevent
async.io将需要完全重新写入,如果您已经在使用标准库并希望使用**wampy**,这*不是*问题-使用默认gevent滚动-因为这两个事件循环可以运行并排IDE。
********
alpha功能
********
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
默认情况下禁用,但通过设置环境变量**默认心跳秒**可以告诉wampy开始pingt路由器/代理,即crossbar.
::
$export default懔heartbeat懔seconds=5
还有**heartbeat懔timeout懔seconds**(默认为2秒),在missed时将增加missed pong计数器。现在就到此为止;WIP。
~~~~~~~~~~~~~~~~~~~~~~~~
wamp advacned protocol描述了一个rpc超时,它是**wampy**实现的,但crossbar还没有实现。见https://github.com/crossbario/crossbar/issues/299。wampy确实在调用消息中将您的首选值传递给路由器/代理,但是实际的超时是由wampy实现的,只需在头部切断请求。不幸的是,这确实意味着服务器可能仍然会为您返回一个值,而您的应用程序将不得不处理这个值。我们也发送了取消消息,但这里也有问题:正在进行工作。
*****************
运行测试
***********
:
$pip install--可编辑。[dev]
$py.test./test-v
********
**************
::
$sphinx build-e-b html./docs//docs/_build/
**如果您喜欢这个项目,那么谢谢您,欢迎您参与进来。**
*****
你是谁。欢迎大家来。感谢您阅读"贡献"指南。把你自己加入到公关的"贡献者"名单上-你应该!非常感谢。很高兴听到大家西斯旺比,请在评论中与我分享你的公关技巧。
谢谢!
…_ crossbar.io文档:http://crossbar.io/docs/quick start/
…_阅读文档:http://wampy.readthedocs.io/en/latest/
…_ wamp协议:http://wamp proto.org/
…_示例:https://github.com/noisyboiler/wampy/blob/master/docs/examples/services.py l26
。_高速公路:http://autobahn.ws/python/
…_ nameko:https://github.com/nameko
。_ nameko_wamp:https://github.com/noisyboiler/nameko wamp
。_ twisted:https://twistedmatrix.com/trac/
。_ wamp:http://wamp proto.org/static/rfc/draft-oberstet-hybi-crossbar-wamp.html
_贡献:https://github.com/noisyboiler/wampy/blob/master/contribution.md
。_贡献者:https://github.com/noisyboiler/wampy/blob/master/contributors.txt
。_ gevent:http://www.gevent.org/
。_事件:http://eventlet.net/
…_烧瓶:https://github.com/pallets/flask
…_烧瓶:https://github.com/noisyboiler/flask wamp
_ flask-wamp:https://github.com/noisyboiler/flask-wamp
。_这里:https://medium.com/@noisyboiler/the-web-application-messaging-protocol-d8efe95aeb67
travis python27 python34 python35 python36
|特拉维斯图片:https://travis-ci.org/noisyboiler/wampy.svg?分支=主
…_特拉维斯:https://travis ci.org/noisyboiler/wampy
…| python27图像::https://img.shields.io/badge/python-2.7-blue.svg
…_ python27:https://pypi.python.org/pypi/wampy/
…| python34图像::https://img.shields.io/badge/python-3.4-blue.svg
…_ python34:https://pypi.python.org/pypi/wampy/
…| python35图像::https://img.shields.io/badge/python-3.5-blue.svg
…_ python35:https://pypi.python.org/pypi/wampy/
…| python36图像::https://img.shields.io/badge/python-3.6-blue.svg
…_ python36:https://pypi.python.org/pypi/wampy/
**
**
wampy
**
*[whomp ee]*
……引述:
有关wamp是什么的背景信息,请参见"here`.
应用程序执行异步。**wampy**是"高速公路"的轻量级替代品。
消息传送。
有关更详细的文档,请参见"readthedocs"。
-通过websockets进行远程过程调用
-通过websockets发布和订阅
-客户端身份验证
-传输层安全性
-clilopment
-测试项目时要使用的pytest fixture
-nameko戋与nameko戋wamp戋的集成
-flask戋与flask戋wamp戋的集成
-可配置和可扩展的异步后端(beta)
快速启动-连接并开始!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果您已经访问了一个正在运行的**路由器**,该路由器已连接了其他**对等点**,请留在这里。如果没有,跳到下一节。如果你还在这里……
::
……然后打开一个python shell。
hat过程。
::
从wampy.peers导入client
使用client()作为client:
response=client.rpc.get庘foobar()
使用此处的响应执行一些操作
r/>从wampy.peers导入客户端
它是客户端实例的作用域。
请参阅"readthedocs"以了解更多有关此的详细信息。
运行并调用wampy应用程序
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~然后,消息在**客户端**之间通过**路由器**上名为**域**的管理域进行路由。
对于最快的启动,我建议您使用**crossbar.io**并在默认主机和端口上启动,并使用默认的**域**和**角色**。请参阅"crossbar.io docs"以获取有关此操作的说明,或者使用**wampy的**测试设置运行此操作。
::
$pip install--可编辑。[dev]
$crossbar start--config./wampy/testing/config s/crossbar.json
wampy rpc
~首选文本编辑器,我们将编写几行python构造一个简单的**wamp**服务,它接受一个十进制数并返回它的二进制表示形式-wowzers!
::
从wampy.peers.clients导入client
从wampy.roles导入被叫方
类binaryNumberService(client):
@callee
定义获取二进制数(self,number):
返回二进制数(number)
您的python路径,我们将使用一个**wampy**命令行界面工具来启动服务。
::
$wampy run path.to.your.module.including.module廑name:binaryNumberService
例如,针对previ建议的路由器运行一个**wampy**示例应用程序。ly:
:::
$wampy run docs.examples.services:dateservice--config./wampy/testing/configs/crossbar.json
"`binarynumberservice`"示例已经存在于**wampy**示例中,因此如果您愿意,请将该文本编辑器放在一边。只需从命令行执行:
::
$wampy run docs.examples.services:binarynumberservice--config./wampy/testing/configs/crossbar.json
rminal(但完成后需要"ctrl-c"。
:
,[1]:从wampy.peers.clients导入client
,[2]:以client(url="ws://localhost:8080")作为client:
result=client.rpc。在[3]:res中获取二进制数(number=100)
结果
out[3]:u'0b1100100'
他的理由还有一个"callproxy"对象,它通过更松散地包装**wampy的**``call``消息来实现``call``api。在这种模式中,应用程序及其终结点由点分隔字符串而不是单个api名称标识,例如
::
"com.example.endpoint"
就像"rpc"api一样,"call"api在每个**wampy**客户端上都是直接可用的。让我们一起来看看这两个例子。
::
>;>client.rpc.get掴foo掴bar(eggs,foo=bar,spam=ham)
>;>client.call("get掴foo掴bar",eggs,foo=bar,spam=ham)
``调用"api"的行为更像是一个经典的**crossbar.io**应用程序,而"rpc"将用于nameko wamp。
the"call"api却允许使用以下形式的调用:client.call("com.myapp.foo.bar",eggs,foo=bar,spam=ham)
我无法使用"rpc"api。
您可以在python模块中自己创建一个(作为**wampy**``client``的子类),也可以使用已经在``docs.examples.services``中为您提供的示例``client``.
这里我们使用的是上述示例服务,但是**订阅者**只是一个带有b修饰方法的**wampy**``client``是"订阅"。让我们启动这个示例服务。
r/>
在另一个终端中,使用**wampy**虚拟机,您可以创建一个**发布服务器**-这与任何其他**wampy**客户端没有区别。
:
:
/>result=client.publish(topic="foo",message="spam")
希望您在运行示例服务的屏幕上看到您发送的任何消息。您还将看到**wampy**选择发送的元数据。
请注意。**wampy**相信显式的"kwargs",而不是裸的"args",因此只能发布关键字参数。简单的参数不能告诉读者关于这个调用的足够信息,所以即使**wamp**支持它们,**wampy**不支持它们。
)例如,
:
in[1]:从wampy.peers导入客户端
in[2]:以client()作为客户端:
client.publish(
topic="foo",
ham="spam",
birds={foo-bird':1,'bar-bird':2},
message="hello world",
)
很高兴在此探索如何支持"autobahn"等实现。
当前的扩展是:
-`flask wamp`\u
-`nameko wamp`\u
鼓励对其他python框架进行扩展!
**************
async networking
**************
async networking的默认后端是**gevent**,但如果您的应用程序已经在使用此后端,则可以将其切换到**eventlet**。
::
后退很简单。
::
$export wampy_async_name=gevent
async.io将需要完全重新写入,如果您已经在使用标准库并希望使用**wampy**,这*不是*问题-使用默认gevent滚动-因为这两个事件循环可以运行并排IDE。
********
alpha功能
********
默认情况下禁用,但通过设置环境变量**默认心跳秒**可以告诉wampy开始pingt路由器/代理,即crossbar.
::
$export default懔heartbeat懔seconds=5
还有**heartbeat懔timeout懔seconds**(默认为2秒),在missed时将增加missed pong计数器。现在就到此为止;WIP。
wamp advacned protocol描述了一个rpc超时,它是**wampy**实现的,但crossbar还没有实现。见https://github.com/crossbario/crossbar/issues/299。wampy确实在调用消息中将您的首选值传递给路由器/代理,但是实际的超时是由wampy实现的,只需在头部切断请求。不幸的是,这确实意味着服务器可能仍然会为您返回一个值,而您的应用程序将不得不处理这个值。我们也发送了取消消息,但这里也有问题:正在进行工作。
*****************
运行测试
***********
:
$pip install--可编辑。[dev]
$py.test./test-v
********
**************
::
**如果您喜欢这个项目,那么谢谢您,欢迎您参与进来。**
*****
你是谁。欢迎大家来。感谢您阅读"贡献"指南。把你自己加入到公关的"贡献者"名单上-你应该!非常感谢。很高兴听到大家西斯旺比,请在评论中与我分享你的公关技巧。
谢谢!
…_ crossbar.io文档:http://crossbar.io/docs/quick start/
…_阅读文档:http://wampy.readthedocs.io/en/latest/
…_ wamp协议:http://wamp proto.org/
…_示例:https://github.com/noisyboiler/wampy/blob/master/docs/examples/services.py l26
。_高速公路:http://autobahn.ws/python/
…_ nameko:https://github.com/nameko
。_ nameko_wamp:https://github.com/noisyboiler/nameko wamp
。_ twisted:https://twistedmatrix.com/trac/
。_ wamp:http://wamp proto.org/static/rfc/draft-oberstet-hybi-crossbar-wamp.html
_贡献:https://github.com/noisyboiler/wampy/blob/master/contribution.md
。_贡献者:https://github.com/noisyboiler/wampy/blob/master/contributors.txt
。_ gevent:http://www.gevent.org/
。_事件:http://eventlet.net/
…_烧瓶:https://github.com/pallets/flask
…_烧瓶:https://github.com/noisyboiler/flask wamp
_ flask-wamp:https://github.com/noisyboiler/flask-wamp
。_这里:https://medium.com/@noisyboiler/the-web-application-messaging-protocol-d8efe95aeb67