Working with TCP Sockets 読書メモ 第6章 はじめてのクライアント/サーバ

目次


はじめてのクライアント/サーバ

サーバ

  • 以下は、シンプルなNoSQLのクライアントとサーバの実装例

  • 現在のCloudHashには欠陥もある
  • そのうちの1つは、クライアントがリクエストの送信の度に接続する必要があること
  • サーバに並列性(concurrency)を導入する必要がある
    • 具体的な実装は次章以降

ソケットのオプション

  • ソケットの挙動を細かくカスタマイズするにはオプションを使用する

SO_TYPE

  • getsockoptを実行するとSocket::Optionのインスタンスが取得できる
  • SocketOption#intを実行すると、オプションの値(整数)が取得できる

SO_REUSE_ADDR

  • 全ての サーバはこのオプションを設定すべき
  • SO_REUSE_ADDRオプションを使うと、同一のローカルアドレスの使い回しができる
    • 条件は、サーバがTCPのTIME_WAITという状態であること

TIME_WAITとは

  • closeを実行すると、ソケットはTIME_WAIT状態になる
  • ソケットはバッファー内で待ち状態(pending)になっている
  • デフォルトでは、TIME_WAIT状態のソケットと同じアドレスは使えない
    • Errno::EADDRINUSEが発生する
  • SO_REUSE_ADDRを設定するとこの問題が発生しなくなる

  • TCPServer.newSocket.tcp_server_loopなどではこのオプションがデフォルトで有効化されている

本章で扱ったシステムコール

  • setsockopt(2)
  • getsockopt(2)

“Working with TCP Sockets 読書メモ 第6章 はじめてのクライアント/サーバ” への 2 件のフィードバック

コメントを残す