用于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



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

推荐PyPI第三方库


热门话题
ArrayList中实体对象上的JAVA泛型   带Redis的爪哇芹菜vs单用Redis   java在设备面向横向时隐藏标题栏/通知栏   java JXTreeTable:如何使用ComponentProvider为一列设置渲染器   java创建异常的成本与记录异常的成本相比   java在方法参数中使用setter传递新对象   java在一个类中的方法与另一个类中的方法交互时遇到问题   java如何迭代2个大小相等的ArrayList   Java getDesktop()。open在Windows中工作,但在Mac中不工作   从tomcat切换到jetty后的java“无法启动嵌入式容器”,Spring引导   java如何使用void方法   java如何在解组时在JAXB的ValidationEventHandler中获取节点值?   如何使用Akka Java API创建不响应的TCP接收器   JavaScriptjQuery在java中将记录上传到数据库时的进度条   如何在重新绘制时在java小程序中显示上一个图像