Один вопрос с 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.

Другие вопросы по тегам