Один вопрос с EventMachine
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
Мой вопрос, как получить some_value в модуле EchoServer? и какова связь между классом Test и модулем EchoServer?
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
В вашем примере единственное отношение между Test и EchoServer заключается в том, что вы запустили цикл событий EM изнутри класса теста. Это не влияет на EM или то, как он будет использовать EchoServer.