2010-10-21 45 views
0
require 'eventmachine' 

    module EchoServer 
    def post_init 
     puts "-- someone connected to the echo server!" 
    end 

    def receive_data data 
     send_data ">>>you sent: #{data}" 
     close_connection if data =~ /quit/i 
    end 

    def unbind 
     puts "-- someone disconnected from the echo server!" 
    end 
    end 

    class Test 
    attr_reader :some_value 
    def start 
     EventMachine::run { 
     EventMachine::start_server "127.0.0.1", 8081, EchoServer 
     } 
    end 
    end 

我的問題是如何獲得EchoServer模塊some_value?以及類Test和模塊EchoServer之間的關係是什麼?與EventMachine的一個問題

+1

你應該把問題放在問題的標題中,而不是'EventMachine'的一個問題' – SeanJA 2010-10-21 07:10:35

+0

是的,你能否給一個更好的標題?我很抱歉,我不知道標題:) – why 2010-10-21 07:19:19

回答

1

如果你改變你的EchoServer成一個類,並添加attr_accessor爲SOME_VALUE你可以可以再附上一個塊起始服務器並傳遞價值。

#!/usr/bin/env ruby 

require 'rubygems' 
require 'eventmachine' 

class EchoServer < EM::Connection 
    attr_accessor :some_value 
    def post_init 
    puts "blah with #{some_value}" 
    end 

    def receive_data(data) 
    puts "#{some_value} received #{data}" 
    end 

    def unbind 
    puts "unbound" 
    end 
end 

v = "some_value" 
EM.run do 
    EM.start_server "127.0.0.1", 8081, EchoServer do |conn| 
    conn.some_value = v 
    end 
end 

在你的榜樣測試之間的唯一關係而EchoServer是你從測試類內部運行EM事件循環。這對EM或它將如何使用EchoServer沒有任何影響。

+0

謝謝你「塊」,它的工作原理! – why 2010-11-30 13:43:38