Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go言語でWebSocketプロトコルを自作する

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for NemotoMasaya NemotoMasaya
September 25, 2024

 Go言語でWebSocketプロトコルを自作する

Avatar for NemotoMasaya

NemotoMasaya

September 25, 2024
Tweet

More Decks by NemotoMasaya

Other Decks in Programming

Transcript

  1. 自己紹介 • 名前: 根本昌也 • 所属: 株式会社ハウテレビジョン ◦ プロダクト: 外資就活

    (新卒採用プラットフォーム) ◦ 役割: EM と SWE 半々 ◦ 新卒入社 2年目 • X(Twitter): @_masa5555 • GitHub: github.com/masa5555
  2. モチベーション • SWEをやっているからには、低レイヤーも理解したい • なぜWebSoketプロトコルか? ◦ 情報が少ない ▪ 主要なテーマはすでに既存資料がある ◦

    比較的理解のハードルが低そう ▪ 低レイヤーの分野に慣れていないので、最初のステップとして良さそう • Go言語を選んだ理由 ◦ 業務で触っている
  3. やったこと • 主に「RFC6455 The WebSocket Protocol」を読む • Go言語(標準ライブラリのみ)で実装 https://github.com/masa5555/original-websocket ◦

    ハンドシェイクの確立(HTTP -> TCP) ◦ 接続時に、すでに送信されたデータをクライアントに送信する ◦ ブラウザから送信された1データフレーム単位のデータを解釈する ◦ 送信されたデータを他のクライアントに送信する
  4. 感想・今後の展望 • RFCを読むことで技術の設計思想を理解できた ◦ 例) WebSocketは既存のHTTPインフラストラクチャのコンテキストで対処する方針で設計されたも の • ライブラリを使うだけではわからない内部構造を理解できた ◦

    例)HTTPでハンドシェイクしてから、 TCP接続に切り替える • より実装を拡張していくことで、理解を深めたい ◦ 長いデータのフラグメンテーション ◦ 圧縮 ◦ HTTP2の場合やWebTransportなど新しい仕様