Slide 1

Slide 1 text

Go言語でWebSocketプロトコルを 自作する 根本昌也 2024/9/25 好きな言語で作る!低レイヤゆるっとLT大会

Slide 2

Slide 2 text

自己紹介 ● 名前: 根本昌也 ● 所属: 株式会社ハウテレビジョン ○ プロダクト: 外資就活 (新卒採用プラットフォーム) ○ 役割: EM と SWE 半々 ○ 新卒入社 2年目 ● X(Twitter): @_masa5555 ● GitHub: github.com/masa5555

Slide 3

Slide 3 text

モチベーション ● SWEをやっているからには、低レイヤーも理解したい ● なぜWebSoketプロトコルか? ○ 情報が少ない ■ 主要なテーマはすでに既存資料がある ○ 比較的理解のハードルが低そう ■ 低レイヤーの分野に慣れていないので、最初のステップとして良さそう ● Go言語を選んだ理由 ○ 業務で触っている

Slide 4

Slide 4 text

やったこと ● 主に「RFC6455 The WebSocket Protocol」を読む ● Go言語(標準ライブラリのみ)で実装 https://github.com/masa5555/original-websocket ○ ハンドシェイクの確立(HTTP -> TCP) ○ 接続時に、すでに送信されたデータをクライアントに送信する ○ ブラウザから送信された1データフレーム単位のデータを解釈する ○ 送信されたデータを他のクライアントに送信する

Slide 5

Slide 5 text

デモ(説明文にURL記載)

Slide 6

Slide 6 text

感想・今後の展望 ● RFCを読むことで技術の設計思想を理解できた ○ 例) WebSocketは既存のHTTPインフラストラクチャのコンテキストで対処する方針で設計されたも の ● ライブラリを使うだけではわからない内部構造を理解できた ○ 例)HTTPでハンドシェイクしてから、 TCP接続に切り替える ● より実装を拡張していくことで、理解を深めたい ○ 長いデータのフラグメンテーション ○ 圧縮 ○ HTTP2の場合やWebTransportなど新しい仕様