2010-12-17 6 views
2

데이터를 쓰고 수신하지 않는 서버를 구현해야합니다. 내가 발견 한 모든 이벤트 머신 서버 예제는 항상 서버가 먼저 데이터를 수신 한 다음 데이터로 응답합니다. 클라이언트 연결 후 클라이언트에 데이터 쓰기를 시작해야합니다.이벤트 머신 서버에 데이터를 쓰는 방법은 무엇입니까?

나는 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하는

답변

1

감사합니다,이 파악되었다. 고객은 동일합니다. 서버 코드 :

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' 
} 
관련 문제