目次
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)