GitHubじゃ!Pythonじゃ!

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

websocket-client

websocket-client – PythonのWebSocketクライアント …

投稿日:

PythonのWebSocketクライアント https://github.com/websocket-client/w

websocket-client

websocket-clientモジュールはPythonのWebSocketクライアントです。 これにより、WebSocketに低レベルのAPIが提供されます。 すべてのAPIは同期関数です。

websocket-clientはhybi-13のみをサポートしています。

ライセンス

  • LGPL

インストール

このモジュールは、Python 2.7とPython 3.xでテストされています。

「python setup.py install」または「pip install websocket-client」と入力してインストールします。

あぶない!

v0.16.0から、python 3用に “pip install websocket-client”でインストールできます。

このモジュールは

  • 6
  • Python 2.x用のbackports.ssl_match_hostname

パフォーマンス

“送信”メソッドは純粋なPythonでは遅すぎます。 あなたがより良いperformaceをしたい場合は、numpyまたはwsaccelをインストールしてください。

numpyから最高のパフォーマンスを得ることができます。

Python 3について

今、バージョン0.14.0の単一ソースコードでPython 3をサポートします。 ありがとう、@battlemidgetと@ralphbean。

HTTPプロキシ

httpプロキシ経由でwebsocketアクセスをサポートします。 プロキシサーバーは、WebSocketポートに “CONNECT”メソッドを許可する必要があります。 デフォルトのsquid設定は “HTTPSポートのみを接続する”ことができます。

websocket-clientの現在の実装では、プロキシ経由で “CONNECT”メソッドを使用しています。

import websocket
ws = websocket.WebSocket()
ws.connect("ws://example.com/websocket", http_proxy_host="proxy_host_name", http_proxy_port=3128)

長寿命接続

この例は、JavaScriptを使用するブラウザーでのWebSocketコードの外観と似ています。

import websocket
try:
    import thread
except ImportError:
    import _thread as thread
import time

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    def run(*args):
        for i in range(3):
            time.sleep(1)
            ws.send("Hello %d" % i)
        time.sleep(1)
        ws.close()
        print("thread terminating...")
    thread.start_new_thread(run, ())


if __name__ == "__main__":
    websocket.enableTrace(True)
    ws = websocket.WebSocketApp("ws://echo.websocket.org/",
                              on_message = on_message,
                              on_error = on_error,
                              on_close = on_close)
    ws.on_open = on_open
    ws.run_forever()

短命の1回限りの送信 – 受信

これは、短いメッセージを伝え、完了したら直ちに切断する場合です。

from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result =  ws.recv()
print("Received '%s'" % result)
ws.close()

ソケットオプションをカスタマイズする場合は、sockoptを設定します。

sockoptの例

from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/",
                        sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY),))

高度な機能:カスタムクラス

また、あなた自身で素敵な詳細を処理したい場合は、接続用に独自のクラスを作成することもできます。

import socket
from websocket import create_connection, WebSocket
class MyWebSocket(WebSocket):
    def recv_frame(self):
        frame = super().recv_frame()
        print('yay! I got this frame: ', frame)
        return frame

ws = create_connection("ws://echo.websocket.org/",
                        sockopt=((socket.IPPROTO_TCP, socket.TCP_NODELAY, 1),), class_=MyWebSocket)

よくある質問

ssl cert verificationを無効にするにはどうすればよいですか?

ssloptを{“cert_reqs”:ssl.CERT_NONE}に設定してください。

WebSocketAppサンプル

ws = websocket.WebSocketApp("wss://echo.websocket.org")
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

create_connectionサンプル

ws = websocket.create_connection("wss://echo.websocket.org",
  sslopt={"cert_reqs": ssl.CERT_NONE})

WebSocketサンプル

ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE})
ws.connect("wss://echo.websocket.org")

ホスト名検証を無効にする方法。

ssloptを{“check_hostname”:False}に設定してください。 (v0.18.0以降)

WebSocketAppサンプル

ws = websocket.WebSocketApp("wss://echo.websocket.org")
ws.run_forever(sslopt={"check_hostname": False})

create_connectionサンプル

ws = websocket.create_connection("wss://echo.websocket.org",
  sslopt={"check_hostname": False})

WebSocketサンプル

ws = websocket.WebSocket(sslopt={"check_hostname": False})
ws.connect("wss://echo.websocket.org")

SNIを有効にする方法?

SNIサポートはPython 2.7.9+および3.2+で利用可能です。 可能な限り自動的に有効になります。

サブプロトコル。

サーバーはサブプロトコルをサポートする必要がありますので、このようなサブプロトコルを設定してください。

サブプロトコールサンプル

ws = websocket.create_connection("ws://example.com/websocket", subprotocols=["binary", "base64"])

wsdump.py

wsdump.pyは簡単なWebSocketテスト(デバッグ)ツールです。

echo.websocket.orgのサンプル:

$ wsdump.py ws://echo.websocket.org/
Press Ctrl+C to quit
> Hello, WebSocket
< Hello, WebSocket
> How are you?
< How are you?

使用法

使用法:

wsdump.py [-h] [-v [VERBOSE]] ws_url

WebSocketシンプルダンプツール

位置の引数:
ws_url websocket url。 例。 ws://echo.websocket.org/
オプション引数:
-h、--help このヘルプメッセージを表示して終了する
WebSocketApp
-v VERBOSE 、--verbose VERBOSE
冗長モードを設定します。 1に設定すると、オペコードを表示します。 2に設定すると、websocketモジュールをトレースできるようになります

例:

$ wsdump.py ws://echo.websocket.org/
$ wsdump.py ws://echo.websocket.org/ -v
$ wsdump.py ws://echo.websocket.org/ -vv







-websocket-client

執筆者: