我正在使用以下代码连接到我正在编写的网络服务(由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
时挂起,因为我认为它等待连接关闭所以它知道它获得了所有数据?这不是我想要发生的事情。
我的套接字服务器只需要一个命令(在一行上)并返回一行输出。
我有什么想法可以做到这一点?感谢。
答案 0 :(得分:1)
事实证明,如果服务器发送以\ n字符结尾的响应,connection.gets
方法将返回一行数据。所以我刚刚将\n
添加到send_data
来电的末尾,然后转而使用puts connection.gets
,效果很好!