tcp-клиент не может получать данные от eventmachine

#ruby #tcp #eventmachine

#ruby #tcp #eventmachine

Вопрос:

есть код, клиент:

 require 'rubygems'
require 'benchmark'
require 'socket'

i=0
TCPSocket.open "127.0.0.1", 8080 do |s|
  s.send "#{i}th sending", 0        
   if line = s.gets
     puts line
   end
end
  

сервер:

 require 'rubygems'
require 'benchmark'
require 'eventmachine'
class Handler  < EventMachine::Connection
  def receive_data(data)
    sleep 2 # simulate a long running request
    send_data "send_response"
    puts data
  end
end

EventMachine::run {
  EventMachine::start_server("0.0.0.0", 8080, Handler)
  puts "Listening..."
}
  

Клиент не может ничего напечатать

Ответ №1:

Это взаимодействие между s.gets клиентом и send_data "send_response" сервером.

Ваш небольшой тест отлично работает для меня, когда я меняю:

 send_data "send_response"
  

Для

 send_data "send_responsen"
  

s.gets Ожидает перевода строки от удаленного клиента. Ничего не приходит.