WebSocket客户端和服务器库,WAMP实时框架
项目描述
在 Twisted 和 asyncio 上为 Python 实现的 WebSocket & WAMP。
简介
Autobahn|Python 是 Autobahn 的一个子项目,并为 Python 3.7+ 提供了 WebSocket 协议和 Web 应用消息协议(WAMP)的开源实现,这些协议在 Twisted 和 asyncio 上运行。
适用于 Python 3.7+。
您可以使用 Autobahn|Python 在 Python 中创建仅使用 WebSocket 或 WAMP 的客户端和服务器。
WebSocket 允许在 Web 和其他地方进行双向实时消息传递,而 WAMP 在 WebSocket 上添加了实时应用程序通信。
WAMP 为在 WebSocket 上运行的 一个 协议中的应用程序提供异步 远程过程调用 和 发布和订阅。WAMP 是一个 路由 协议,因此您需要一个 WAMP 路由器 来连接您的基于 Autobahn|Python 的客户端。我们提供了 Crossbar.io,但还有其他 选项。
特性
看看一些代码
为了给您一个初步印象,这里有两个示例。我们还有很多更多 在存储库中。
WebSocket 回声服务器
这里是一个简单的 WebSocket 回声服务器,将回显接收到的任何 WebSocket 消息
from autobahn.twisted.websocket import WebSocketServerProtocol
# or: from autobahn.asyncio.websocket import WebSocketServerProtocol
class MyServerProtocol(WebSocketServerProtocol):
def onConnect(self, request):
print("Client connecting: {}".format(request.peer))
def onOpen(self):
print("WebSocket connection open.")
def onMessage(self, payload, isBinary):
if isBinary:
print("Binary message received: {} bytes".format(len(payload)))
else:
print("Text message received: {}".format(payload.decode('utf8')))
# echo back message verbatim
self.sendMessage(payload, isBinary)
def onClose(self, wasClean, code, reason):
print("WebSocket connection closed: {}".format(reason))
要实际运行上述服务器协议,您需要一些 样板代码。
WAMP 应用组件
这是一个WAMP应用程序组件,它执行WAMP提供的所有四种操作
订阅主题
发布事件
注册程序
调用程序
from autobahn.twisted.wamp import ApplicationSession
# or: from autobahn.asyncio.wamp import ApplicationSession
class MyComponent(ApplicationSession):
@inlineCallbacks
def onJoin(self, details):
# 1. subscribe to a topic so we receive events
def onevent(msg):
print("Got event: {}".format(msg))
yield self.subscribe(onevent, 'com.myapp.hello')
# 2. publish an event to a topic
self.publish('com.myapp.hello', 'Hello, world!')
# 3. register a procedure for remote calling
def add2(x, y):
return x + y
self.register(add2, 'com.myapp.add2')
# 4. call a remote procedure
res = yield self.call('com.myapp.add2', 2, 3)
print("Got result: {}".format(res))
上述代码在Twisted和asyncio上运行,只需更改一行(MyComponent的基本类)。要实际运行上述应用程序组件,您需要一些样板代码和一个WAMP路由器。
扩展功能
网络框架
Autobahn可以在Twisted和asyncio上运行。要选择相应的网络框架,请安装相应的版本
asyncio:安装asyncio(在Python 2上时,否则它已经包含在标准库中)和Autobahn中的asyncio支持
twisted:安装Twisted和Autobahn中的Twisted支持
WebSocket加速和压缩
accelerate:安装WebSocket加速 - 仅在CPython上使用 - 不要在PyPy(它具有本机速度)上使用
compress:安装(非标准)WebSocket压缩器 bzip2 和 snappy(基于标准 deflate 的WebSocket压缩已包含在基本安装中)
加密和WAMP身份验证
Autobahn支持通过TLS(WebSocket和所有WAMP传输)运行,以及 WAMP-cryposign 身份验证。
要安装,请使用此版本
encryption:安装TLS和WAMP-cryptosign依赖项
Autobahn还支持 WAMP-SCRAM 身份验证。要安装
scram:安装WAMP-SCRAM依赖项
XBR
Autobahn包括对XBR的支持。要安装,请使用此版本
xbr:
要安装
pip install autobahn[xbr]
或(Twisted,带有更多功能)
pip install autobahn[twisted,encryption,serialization,xbr]
或(asyncio,带有更多功能)
pip install autobahn[asyncio,encryption,serialization,xbr]
原生向量扩展(NVX)
> 这尚未完成 - Alpha!
Autobahn包含 NVX,这是一个网络加速库,为WebSocket(XOR掩码)和UTF-8验证提供了SIMD加速的原生向量代码。
WAMP序列化器
serialization:要安装额外的WAMP序列化器:CBOR,MessagePack,UBJSON和Flatbuffers
以上适用于高级用途。通常我们建议在可能的情况下使用CBOR,否则使用标准库中的JSON。
要安装带有所有可用序列化器的Autobahn
pip install autobahn[serializers]
或(开发安装)
pip install -e .[serializers]
此外,要加快CPython上的JSON使用ujson,请设置环境变量
AUTOBAHN_USE_UJSON=1
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
autobahn-24.4.2.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a2d71ef1b0cf780b6d11f8b205fd2c7749765e65795f2ea7d823796642ee92c9 |
|
MD5 | cedc5252be771288b19c237cd54a63e9 |
|
BLAKE2b-256 | 38f28dffb3b709383ba5b47628b0cc4e43e8d12d59eecbddb62cfccac2e7cf6a |