Working with TCP Sockets 読書メモ 目次
シリアル
- 初めに取り上げるのは、リクエスト処理の「シリアル」モデル
解説
- 「シリアル」アーキテクチャではクライアントの接続は連続的に処理される
- このアーキテクチャの流れは以下のようになる
- クライアントが接続する
- クライアントとサーバはリクエストとレスポンスを相互にやり取りする
- クライアントは接続を切る
- 1に戻る
実装
require 'socket'
require_relative 'command_handler'
module FTP
CRLF = "\r\n"
class Serial
def initialize(port = 21)
@control_socket = TCPServer.new(port)
trap(:INT) { exit }
end
def gets
@client.gets(CRLF)
end
def respond(message)
@client.write(message)
@client.write(CRLF)
end
def run
loop do
@client = @control_socket.accept
respond "220 OHAI"
handler = CommandHandler.new(self)
loop do
request = gets
if request
respond handler.handle(request)
else
@client.close
break
end
end
end
end
end
end
server = FTP::Serial.new(4481)
server.run
- 接続ごとにCommandHandlerが処理を行う
考慮事項
- メリット:シンプルさ
- デメリット:並列性がない