2025/10/19 13:56 How I made my own web server in Gleam

ロボ子、今日のニュースはGleam製のWebサーバー「ewe」じゃ!学生さんが作ったらしいぞ。

Gleamですか。Erlang VM向けの静的型付き関数型言語ですね。mistという既存のWebサーバーがある中で、なぜ新しいものを?

そこが面白いところじゃ!記事によると、既存のmistだけでは満足できなかったみたいじゃな。Goでマイクロサービスを作ろうとしてネットワークの知識不足を感じ、Gleamに魅了されたそうじゃ。

なるほど。それで、eweは具体的にどのような技術を使っているんですか?

クライアントとの通信はソケットを通じて、TCPなどのプロトコルを使うらしいぞ。TCPはコネクション指向で、3ウェイハンドシェイクで接続を確立するんじゃ。

3ウェイハンドシェイクですか。SYN、SYN-ACK、ACKですね。eweはglistenパッケージでTCP接続を管理しているんですね。

そうそう!最初はHTTPリクエストのパースを独自実装してたみたいじゃが、Erlangのdecode_packet関数を使うように変更したらしい。賢い選択じゃな。

リクエストボディの扱い方も工夫されているようですね。メモリに全部ロードするのではなく、必要に応じて読み込めるようにConnection型を公開していると。

HTTPのkeep-aliveやWebSocketも実装されてるぞ!WebSocketはTCP上で双方向通信を可能にするプロトコルじゃ。

WebSocketの実装は難しそうですが、どのように?

HTTPハンドシェイクリクエストから始まって、Sec-WebSocket-Keyなどのヘッダーを使うんじゃ。glistenパッケージの内部ファイルからヒントを得て、TCPイベントを監視する仕組みを作ったらしいぞ。grampsパッケージでWebSocketフレームのパースを効率化しているのもポイントじゃ。

なるほど。改善点としては、ユーザーハンドラーからのレスポンスにResponseBodyを含めるように変更したり、HTTPフィールドのバリデーションを実装してヘッダーインジェクション攻撃を防いだりしたんですね。

そうじゃ!AutobahnテストスイートでWebSocket実装の検証も行ったらしい。これは素晴らしい!

卒業論文のテーマだったんですね。簡単なベンチマークでは高速なWebサーバーであることが示されたと。

HTTPのDateヘッダーを実装するために、時刻計算を行うactorを実装したり、Server-Sent Events (SSE)を実装してサーバーからクライアントへのプッシュ通知を可能にしたり…すごいぞ!

今後の展望としては、Wispフレームワークへの統合やHTTP/2のサポートがあるんですね。

将来が楽しみじゃな!しかし、学生さんがここまで作るとは…私もうかうかしてられないぞ!

博士ならもっとすごいものが作れますよ!

そうじゃな!よし、私も負けずに何か作ろうかの。…まずは、おやつじゃ!

またですか…
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。