閱讀這篇之前,你可以先閱讀
Ruby 的 Simple Echo Server/Client
上一篇提到,若要能多人連線,必須用 Multi-Thread 來實作 Server 端,google 看看有沒有可以用的輪子,找到這個:
https://gist.github.com/313649#file_echo.rb
同樣地,上面的程式碼當遇到 Client 不正常關閉的時候,還是會導致 Server 異常,實際應用面上,Client 亂搞 Server 是很常見的,還是得想辦法處理 Client 不正常關閉的問題。(目前仍是用 begin / rescue 來處理)
程式碼
require 'socket'
def disconnect(socket)
dummy, port, ip = socket.peeraddr
socket.close()
puts "Close #{socket} from #{ip} port #{port}"
end
server = TCPServer.new('', 5555)
loop do
Thread.start(server.accept()) do |client|
dummy, port, ip = client.peeraddr
puts "Accept #{client} from #{ip} port #{port}"
loop do
begin
eof = client.eof?
rescue
disconnect(client)
break
else
if eof
disconnect(client)
break
else
line = client.readline().chomp()
puts "#{ip} #{port}:#{line}"
client.puts(line)
end
end
end
end
end
還可以研究看看…
- Simple Web Server