2012-02-28 18 views
0

我使用下面的代碼編寫了一個TCP服務器。這是通過GSM網絡從遠程GPS傳感器接收GPS位置數據。使用Ruby套接字的TCP服務器工作但不使用eventmachine

require 'socket' 

server = TCPServer.open(2000) # Listen on port 2000 
sockets = [server]        # An array of sockets we'll monitor 
log = STDOUT         # Send log messages to standard out 
    while true 
ready = select(sockets) 
readable = ready[0] 

readable.each do |socket| 
    if socket == server 
    client = server.accept 
    sockets << client 
     log.puts "Accepted connection from #{client.peeraddr[2]}" 
     while msg = client.gets 
     puts msg 
    end 
else 
    input = socket.gets 

    if !input 
     log.puts "Client on #{socket.peeraddr[2]} disconnected" 
     sockets.delete(socket) 
     socket.close 
     next 
    end 

    input.chop! 
    if (input == "quit") 
     socket.puts("Bye"); 
     log.puts "Closing connnection to #{socket.peeraddr[2]}" 
     sockets.delete(socket) 
     socket.close 
    else 
     socket.puts(input.reverse) 
    end 
    end 
    end 
end 

然後我用Eventmachine寫了一個。代碼如下:

require 'eventmachine' 

module EchoServer 
def post_init 
    puts "-- someone connected to the echo server!" 
end 

def receive_data data 
    puts data 
end 

def unbind 
    puts "-- someone disconnected from the echo server!" 
end 
end 

EventMachine::run { 
    EventMachine::start_server "127.0.0.1", 2000, EchoServer 
} 

但是,這個事件機器碼將不會接收也不會顯示數據。 Eventmachine代碼的任何部分都是錯誤的?

感謝

+0

我測試你的代碼EventMachine的和它的工作對我蠻好 – 2012-02-28 10:14:09

回答

2

我覺得你的問題是,你只能聽localhost上,試試這個:

EM::run do 
    EM.start_server "0.0.0.0", 2000, EchoServer 
end 
相關問題