GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

crossbario

autobahn-python – TwistedとasyncioのためのPythonのWebSocketとWAMP

投稿日:

TwistedとasyncioのためのPythonのWebSocketとWAMP http://crossbar.io/autobahn

オートバン| Python

TwistedとasyncioのPython用WebSocket&WAMP


クイックリンクソースコード文書WebSocket例WAMPサンプル
コンパニオンプロジェクトAutobahn | JSAutobahn | CppAutobahn | TestsuiteCrossbar.ioWAMP

前書き

Autobahn | PythonAutobahnのサブプロジェクトであり、オープンソースの実装を提供しています

Python 2と3ではTwistedasyncioで動作します。

あなたはAutobahn | Pythonを使ってPythonでクライアントとサーバーを作成することができます。普通のWebSocketやWAMPを使っています。

WebSocket はWeb上やその他の場所で双方向のリアルタイムメッセージングを可能にし、 WAMPはWebSocketの上にリアルタイムのアプリケーション通信を追加します。

WAMPは、 WebSocketを介して実行される1つのプロトコルで、アプリケーションの非同期リモートプロシージャコールPublish&Subscribeを提供します。 WAMPはルーティングされたプロトコルなので、 Autobahn | Pythonベースのクライアントに接続するにはWAMPルーターが必要です。 私たちはCrossbar.ioを提供していますが、 他にもオプションがあります

特徴

  • WebSocketおよびWAMPクライアントおよびサーバー用のフレームワーク
  • Python 2.7および3.3以降と互換性があります
  • CPythonPyPyJythonで動く
  • Twistedasyncioの下で動作します – WebSocket RFC6455とDraft Hybi-10 +
  • WebSocket圧縮を実装する
  • WAMP 、Webアプリケーション・メッセージング・プロトコル
  • 高性能で完全非同期の実装
  • クラス最高の標準適合性( Autobahn TestsuiteClient Serverで 100%厳密なパス)
  • WebSocket用のメッセージ、フレーム、およびストリーミングAPI
  • TLS(セキュアWebSocket)とプロキシをサポートします。
  • オープンソース( MITライセンス

ネイティブ・ベクトル拡張(NVX)

Autobahnには、WebSocket(XORマスキング)とUTF-8検証のためのSIMD加速ネイティブベクターコードを提供するネットワークアクセラレータライブラリであるNVXが含まれています。

> NVXはネームスペースautobahn.nvxに存在し、現在は少なくともSSE2を搭載したx86-86 CPUが必要で、利用可能であればSSE4.1を使用します。 このコードは、ベクトルイントリンシックを使用して記述され、GCCとClangの両方でコンパイルし、CFFIを使用してPythonとインターフェイスするため、PyPy上で高速に実行されます。

いくつかのコードを表示する

あなたに最初の印象を与えるために、ここに2つの例があります。 レポにはもっと多くのものがあります。

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が提供する4種類のアクションをすべて実行する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))

上記のコードは、単一の行( MyComponent基本クラス)を変更することにより、Twistedとasyncioで動作します。 上記のアプリケーションコンポーネントを実際に実行するには、いくつかの定型文WAMPルーターが必要です。







-crossbario
-, , , , , ,

執筆者: