閱讀這篇之前,你可以先閱讀
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}"
endserver = 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
begineof = client.eof?
rescue
disconnect(client) break else if eof disconnect(client) break elseline = client.readline().chomp()
puts "#{ip} #{port}:#{line}"client.puts(line)
end end end endend
還可以研究看看…
- Simple Web Server