ruby - 如何让 eventmachine 服务器只写数据?

标签 ruby eventmachine

我需要实现一个只写数据而不接收数据的服务器。我发现的所有 eventmachine 服务器示例总是让服务器先接收数据,然后再响应数据。我需要它在客户端连接后开始向客户端写入数据。

我试着在 post_init 中放置一个循环,但这似乎不起作用......客户端连接,服务器写入,但客户端似乎从未收到任何东西。有什么建议吗?

测试服务器:

require 'rubygems'
require 'eventmachine'
require 'time'

module TestServer
  def post_init
    puts "-- client connected, sending data --"
    while true do
      send_data "Hello from TestServer\n"
      puts "sent #{Time.now.iso8601}"
    end
  end
end

EventMachine::run {
  EventMachine::start_server "127.0.0.1", 4001, TestServer
  puts 'running test server on 4001'
}

测试客户端:

require 'rubygems'
require 'eventmachine'

module Forwarder
  def post_init
    puts "-- connected to server --"
  end

  def receive_data data
    # none of the following is ever output
    puts "in receive_data"
    puts data
  end
end

EventMachine::run {
  EventMachine::connect '127.0.0.1', 4001, Forwarder
}

谢谢...

最佳答案

感谢 #eventmachine 上的 tmm1,解决了这个问题。客户是一样的。服务器代码是:

require 'rubygems'
require 'eventmachine'
require 'time'

module TestServer
  def post_init
    puts "-- client connected --"
    @timer = EM::PeriodicTimer.new(0.1) {
      send_data "Hello from TestServer at #{Time.now.iso8601}\n"
    }
  end

end

EventMachine::run {
  EventMachine::start_server "127.0.0.1", 4001, TestServer
  puts 'running test server on 4001'
}

关于ruby - 如何让 eventmachine 服务器只写数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472082/

相关文章:

ruby - IndexTank 自动完成 : modifying the autocomplete field text for each result returned

ruby - 想了解 EM-Synchrony 、em-http-request 和 Fiber 之间的关系吗?

ruby-on-rails - 如何使用 Xcode 4.5.1 在 OSX Lion 10.8.2 上编译 EventMachine gem

ruby - 如何在 Sinatra 中运行 EventMachine 和服务页面?

ruby - EventMachine 如何编写对按键使用react的键盘处理程序

ruby-on-rails - 有没有更紧凑的方法来编写这个 ROR 代码?

尝试动态创建 unicode 字符串的 Ruby 抛出 "invalid Unicode escape"错误

ruby-on-rails - 如何查找上个月创建的记录?

ruby - 是否应该在打包的 gem 中包含测试?

ruby-on-rails - 安装 gem 时出错,无法构建 gem native 扩展——无法加载此类文件——mkmf