2010-12-17 3 views
2

Ich muss einen Server implementieren, der nur Daten schreibt, nicht erhalten. Bei allen Beispielen des eventmachine-Servers, die ich gefunden habe, erhält der Server immer zuerst Daten und antwortet dann mit Daten. Ich brauche es, um nur Daten zu einem Client zu schreiben, nachdem ein Client eine Verbindung herstellt.Wie kann ein EventMachine Server nur Daten schreiben?

Ich habe versucht, nur eine Schleife in post_init, aber das scheint nicht zu funktionieren ... der Client verbindet, der Server schreibt, aber der Client scheint nie etwas zu empfangen. Vorschläge?

Der Testserver:

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' 
} 

Der Test-Client:

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 
} 

Dank ...

Antwort

1

Dank an #eventmachine TMM1, bekam dachte dies. Der Kunde ist derselbe. Servercode ist:

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' 
} 
Verwandte Themen