2010-10-21 57 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