Working with TCP Sockets 読書メモ 第10章 メッセージのフレーム化

目次

Working with TCP Sockets 読書メモ 目次

メッセージのフレーム化

  • メッセージ毎にコネクションを張るよりも、複数のメッセージでコネクションを使いまわした方がパフォーマンスが良くなる
  • そのためには、EOF以外の手段でメッセージに区切りを付ける(フレーム化する)必要がある

改行の使用

  • HTTPプロトコルで使用されている方法
# サーバ

def handle(connection)
  loop do
    request = connection.gets
    break if request == 'exit'
    connection.puts process(request)
  end
end
# クライアント

def request(string)
  @connection.puts(string)
  @connection.gets
end

コンテンツの長さ

  • メッセージの先頭に、コマンドの長さを示す整数を入れて送る
# サーバ

SIZE_OF_INT = [11].pack('i').size

def handle(connection)
  packed_msg_length = connection.read(SIZE_OF_INT)
  msg_length = packed_msg_length.unpack('i').first
  request = connection.read(msg_length)
  connection.write process(request)
end
# クライアント

payload = 'SET prez obma'
packed_msg_length = payload.size
connection.write(packed_msg_length)
connection.write(payload)

コメントを残す

コメントを残す