Можно ли подключать необработанные рубиновые сокеты к серверу UNIX машины событий? - PullRequest
2 голосов
/ 20 февраля 2012

У меня запущен сервер UNIX, и код выглядит так:

module UNIX_Server
  def receive_data(data)
    send_data "testing"
  end

  def unbind
    puts "[server] client disconnected."
  end
 end

 EM::run {
  EM::start_unix_domain_server('/tmp/file.sock', UNIX_Server)
 }

Это работает нормально, и я пытаюсь подключиться к этому с помощью Ruby 1.8.7 UNIX Socket:

 s = UNIXSocket.new
 s.puts "test"
 s.gets

Проблема здесь в том, что мой метод gets, кажется, зависает, и клиент только получает данные, когда я делаю Ctrl-C и завершаю работу сервера. Что я здесь не хватает?

1 Ответ

3 голосов
/ 20 февраля 2012

IO#gets читает всю строку за раз.Ваш клиент ожидает символ новой строки, который ваш сервер никогда не отправляет.

Использование

send_data "testing\n" # note the newline character

на вашем сервере должно работать, или вы можете использовать IO#getc впетля.

...