ruby - 可以将原始 ruby​​ 套接字连接到事件机 UNIX 服务器吗?

标签 ruby eventmachine

我启动了一个 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 套接字:

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

这里的问题是我的 gets 方法似乎挂起并且客户端 仅当我执行 Ctrl-C 并终止服务器时才获取数据。我是什么 这里不见了?

最佳答案

IO#gets一次读取一整行。您的客户端正在等待服务器从不发送的换行符。

使用

send_data "testing\n" # note the newline character

在您的服务器中应该可以工作,或者您可以使用 IO#getc循环中。

关于ruby - 可以将原始 ruby​​ 套接字连接到事件机 UNIX 服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363697/

相关文章:

ruby-on-rails - Thin Rails 服务器 EventMachine Gems

ruby - 具有基本身份验证和 gzip 的 em-http 流挂起

ruby - 在 Ruby 中查找字符串中某个字符的 # 次出现

ruby-on-rails - Rails 安装错误 : Failed to build gem native extension

ruby - 如何使用 Ruby + Regex 编写内部自然语言 DSL?

ruby-on-rails - 用纯 Ruby 编写 Rails 模板

ruby-on-rails - "Couldn' t find User without an ID"访问相关模型

ruby-on-rails - 瘦服务器中的 em.synchrony 需要使用后返回结果

ruby - EventMachine: "` start_tcp_server': no acceptor (port is in use or requires root privileges)"

ruby - 检测 eventmachine 断开连接并测试重新连接