2011年8月31日 星期三

Ruby 的 Simple Echo Server 多人連線版本

image 

 

閱讀這篇之前,你可以先閱讀

Ruby 的 Simple Echo Server/Client

 

上一篇提到,若要能多人連線,必須用 Multi-Thread 來實作 Server 端,google 看看有沒有可以用的輪子,找到這個:

https://gist.github.com/313649#file_echo.rb

 

同樣地,上面的程式碼當遇到 Client 不正常關閉的時候,還是會導致 Server 異常,實際應用面上,Client 亂搞 Server 是很常見的,還是得想辦法處理 Client 不正常關閉的問題。(目前仍是用 begin / rescue 來處理)

 

程式碼

echoServerMultiThread.rb

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

沒有留言:

張貼留言