(今までNode.jsを使っていたところをaiohttpで実装しています)。平たく言うとaiohttpはかなり最高なので、今日はそのWebSocketクライアントの実装をソースコードリーディングしていきましょう。APIがWebSocketのようでそうでない変則的な仕様になっていて、それに対応するためにWebSocketクライアントの実装を読んでいました。メソッドから実装を紐解いていきます。このメソッドのドキュメントを読んでおきましょう。https://aiohttp.readthedocs.io/en/stable/client_quickstart.html#websockets今回は細かい仕様には焦点を当てずに、大まかな実装がどのようになっているかを見ていきましょう。いうメソッドに処理があるのでこれを見ていきます)。https://github.com/aio-libs/aiohttp/blob/v3.5.4/aiohttp/client.py#L662まずは必要になるヘッダーの処理が書かれています。ヘッダーの値はここにあります。https://github.com/aio-libs/aiohttp/blob/v3.5.4/aiohttp/hdrs.py#L89-L90次に、対象のURLにリクエストを送信する処理があります。リクエストを送って、WebSocket通信を開始します。オプションを指定して、レスポンスを読み切るまで待たないようにしています。かや、ヘッダーがWebSocketであるかどうかを検証します。https://github.com/aio-libs/aiohttp/blob/v3.5.4/aiohttp/client.py#L714-L721hその後はWebSocket通信のキーの計算などの処理が入りますが、ここは割愛します。https://github.com/aio-libs/aiohttp/blob/v3.5.4/aiohttp/client.py#L714-L721hここで、今後WebSocketで通信できるように先程のレスポンスからコネクションを取り出します。書きこめばUpgrade後の通信を通してサーバーに書き込みができます。クラスでラップしたり、ping/pongをやりとりしたりする処理が必要になります。