Я использую следующий код для подключения к сетевому сервису, который я пишу (поддержанный EventMachine), и у меня возникли некоторые трудности, возникающие в ситуации, позволяющей использовать одно сокетное соединение для выполнения нескольких команд.
#!/usr/bin/env ruby
require 'socket'
opts = {
:address => "0.0.0.0",
:port => 2478
}
connection = TCPSocket.open opts[:address], opts[:port]
# Get ID
connection.print "ID something"
puts connection.read
# Status
connection.print "STATUS"
puts connection.read
# Close the connection
connection.close
Вот как выглядит мой серверный EventMachine ...
module ConnectionHandler
def receive_data data
send_data "Some output #{data}"
end
end
Однако мой первый скрипт ruby зависает, когда он выполняет connection.read
, так как я предполагаю, что он ждет ожиданиясоединение закрыто, чтобы он знал, что он получил все данные?Это не то, чего я хочу.
Мой сервер сокетов просто примет одну команду (в одну строку) и вернет одну строку вывода.
Есть идеи, как мне это сделать?Спасибо.