EventMachine的一个问题

时间:2010-10-21 07:08:23

标签: ruby 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

我的问题是如何在EchoServer模块中获取some_value?类Test和模块EchoServer之间的关系是什么?

1 个答案:

答案 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没有影响。