跳转到主要内容

WebSocket客户端和服务器库,WAMP实时框架

项目描述

在 Twisted 和 asyncio 上为 Python 实现的 WebSocket & WAMP。

Version CI Test Status CI Deploy Status CI Docker Status CI EXE Status Docs Docker Images EXE Download

简介

Autobahn|PythonAutobahn 的一个子项目,并为 Python 3.7+ 提供了 WebSocket 协议和 Web 应用消息协议(WAMP)的开源实现,这些协议在 Twistedasyncio 上运行。

适用于 Python 3.7+。

您可以使用 Autobahn|Python 在 Python 中创建仅使用 WebSocket 或 WAMP 的客户端和服务器。

WebSocket 允许在 Web 和其他地方进行双向实时消息传递,而 WAMP 在 WebSocket 上添加了实时应用程序通信。

WAMP 为在 WebSocket 上运行的 一个 协议中的应用程序提供异步 远程过程调用发布和订阅。WAMP 是一个 路由 协议,因此您需要一个 WAMP 路由器 来连接您的基于 Autobahn|Python 的客户端。我们提供了 Crossbar.io,但还有其他 选项

特性

  • WebSocket 和 WAMP 客户端和服务器框架

  • CPythonPyPy <https://pypy.pythonlang.cn> 上运行

  • Twistedasyncio 下运行 - 实现 WebSocket RFC6455 和 Draft Hybi-10+

  • 实现 WebSocket 压缩

  • 实现 WAMP,Web 应用消息协议

  • 高性能、完全异步实现

  • 最佳标准合规性(通过 Autobahn 测试套件:100% 严格通过:客户端 服务器

  • WebSocket 的消息、帧和流式 API

  • 支持 TLS(安全 WebSocket)和代理

  • 开源(MIT 许可证


看看一些代码

为了给您一个初步印象,这里有两个示例。我们还有很多更多 在存储库中

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提供的所有四种操作

  1. 订阅主题

  2. 发布事件

  3. 注册程序

  4. 调用程序

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压缩器 bzip2snappy(基于标准 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

项目详情


版本历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

autobahn-24.4.2.tar.gz (482.7 kB 查看哈希值)

上传时间

构建分发

autobahn-24.4.2-py2.py3-none-any.whl (667.0 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持