我怎样才能从Ruby中的TCPSocket读取一行数据?

时间:2012-03-10 22:51:30

标签: ruby sockets eventmachine

我正在使用以下代码连接到我正在编写的网络服务(由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时挂起,因为我认为它等待连接关闭所以它知道它获得了所有数据?这不是我想要发生的事情。

我的套接字服务器只需要一个命令(在一行上)并返回一行输出。

我有什么想法可以做到这一点?感谢。

1 个答案:

答案 0 :(得分:1)

事实证明,如果服务器发送以\ n字符结尾的响应,connection.gets方法将返回一行数据。所以我刚刚将\n添加到send_data来电的末尾,然后转而使用puts connection.gets,效果很好!