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之间的关系是什么?
答案 0 :(得分:1)
如果将EchoServer更改为类并为some_value添加attr_accessor,则可以将块附加到启动服务器并传入值。
#!/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
在您的示例中,Test和EchoServer之间的唯一关系是您从测试类内部运行EM事件循环。这对EM或它将如何使用EchoServer没有影响。