2

データを書き込むだけで、データを受け取らないサーバーを実装する必要があります。私が見つけたすべての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
}

ありがとう...

4

1 に答える 1

1

#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'
}
于 2010-12-17T16:49:15.260 に答える