TCP-сервер, использующий сокет Ruby, работает, но не использует eventmachine - PullRequest
0 голосов
/ 28 февраля 2012

Я написал TCP-сервер, используя приведенный ниже код. Это для получения данных о местоположении GPS через сеть GSM от удаленного датчика GPS.

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 не так?

Спасибо

1 Ответ

2 голосов
/ 28 февраля 2012

Я думаю, что ваша проблема в том, что вы слушаете только на localhost, попробуйте это:

EM::run do
   EM.start_server "0.0.0.0", 2000, EchoServer
end
...