コンテンツにスキップ

WebSockets

Starletteには、HTTPリクエストと同様に機能する WebSocket クラスが含まれていますが、WebSocketでデータを送受信できます。

WebSocket

署名: WebSocket(scope, receive=None, send=None)

starlette. websocketからWebSocketをインポート


async def app(スコープ、受信、送信):
    websocket=WebSocket(スコープ=スコープ、受信=受信、送信=送信)
    websocketを待ちます。
    websocket. send_text('こんにちは、世界!')を待ちます。
    websocket. close()を待つ

WebSocketsはマッピングインターフェイスを提供しているので、scope と同じように使用できます。

例えば、websocket['path'] はAS GIパスを返します。

ユニファイドリソースロケータ(通常はURLとも呼ばれます)

WebSocket URLは websocket.url でアクセスします。

このプロパティは実際には str のサブクラスであり、URLから解析できるすべてのコンポーネントも公開しています。

例えば、websocket.url.path、websocket.url.port、websocket.url.scheme

タイトル

ヘッダーは、大文字と小文字を区別しない不変のマルチディクショナリとして公開されます。

例えば: websocket.headers['sec-websocket-version']

クエリパラメータ

クエリパラメータは、不変のマルチディクショナリとして公開されます。

例えば: websocket.query_params['search']

パスパラメータ

ルーターのパスパラメータは、辞書インターフェイスとして公開されます。

例えば: websocket.path_params['username']

接続を受け入れる

  • await websocket.accept(subprotocol=None, headers=None)

データの送信

  • await websocket.send_text(data)
  • await websocket.send_bytes(data)
  • await websocket.send_json(data)

0.10.0バージョン以降、JSONメッセージはデフォルトでテキストデータフレームで送信されます。websocket.send_json(data, mode="binary") を使用してバイナリデータフレームでJSONを送信します。

データの受信

  • await websocket.receive_text()
  • await websocket.receive_bytes()
  • await websocket.receive_json()

テキストは、"5月のレイズ starlette.websockets.WebSocketDisconnect() .」は通常の意味表現にあまり合わないようで、正確な中国語翻訳が難しい。もしあなたがもっと文脈情報を持っていたり、テキスト内容の正確性を確認したりしたら、もっと満足できる翻訳を提供できるように努力します。現在、字義的に直訳すると、「向上する可能性がある starlette.websockets.WebSocketDisconnect() しかし、この翻訳は実際の意味に合わないかもしれません。

0.10.0バージョン以降、JSONメッセージはデフォルトでテキストデータフレームで受信されます。websocket.receive_json(data, mode="binary") を使用してバイナリデータフレームでJSONを受信します。

反復データ

  • websocket.iter_text()
  • websocket.iter_bytes()
  • websocket.iter_json()

receive_text、receive_bytes、receive_json と同様ですが、非同期イテレータを返します。

starlette. websocketからWebSocketをインポート


async def app(スコープ、受信、送信):
    websocket=WebSocket(スコープ=スコープ、受信=受信、送信=送信)
    websocketを待ちます。
    websocket. iter_text()内のメッセージのasync:
        websocket. send_textを待っています(f"メッセージテキストは:{message}")
    websocket. close()を待つ

starlette.websockets.WebSocketDisconnect が昇格すると、イテレータは終了します。

接続を閉じる

  • await websocket.close(code=1000, reason=None)

メッセージの送受信

元のAS GIメッセージを送受信する必要がある場合は、元の send と receive 呼び出し可能オブジェクトではなく、websocket.send() と websocket.receive() を使用する必要があります。これにより、WebSocketのステータスが正しく更新されます。

  • await websocket.send(message)
  • await websocket.receive()

拒否応答の送信

呼び出す場合 websocket.accept() 呼び出す前に websocket.close() 、サーバーは自動的にHTTP 403エラーをクライアントに送信します。

別のエラー応答を送信する場合は、 websocket.send_denial_response() メソッド。これにより、応答が送信され、接続が切断されます。

  • await websocket.send_denial_response(response)

これには、ASGIサーバーがWebSocket拒否応答拡張をサポートする必要があります。サポートされていない場合は、 RuntimeError エラー。