单个EventMachine反应器中的多个服务器

dav*_*vid 6 ruby eventmachine

是否可以在单个事件计算机中运行多个服务器?

我的意思是单个客户端连接可以同时使用多个服务.例如,登录服务器对用户进行身份验证,然后用户可以同时使用聊天室和简单游戏(例如带有单个客户端套接字的检查程序)?

或者我是否需要为每项服务提供多个eventmachine反应器?

asa*_*aki 7

我试过这个并且它正在工作:

#!/usr/bin/env ruby

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

EventMachine::run {
  EventMachine::start_server "127.0.0.1", 8081, EchoServer
  EventMachine::start_server "127.0.0.1", 8082, EchoServer
  EventMachine::start_server "127.0.0.1", 8083, EchoServer
}
Run Code Online (Sandbox Code Playgroud)

这里有3个不同端口的echo服务.(我懒得实现不同的服务.)

因此,构建一个巨大的多服务包装器非常容易.


更新

基于条件的EM服务器启动的简单代码示例:

#!/usr/bin/env ruby
# encoding: utf-8

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

$check_ok = false

EventMachine::run {
  puts "checker var is: #{$check_ok}"
  EventMachine::start_server "127.0.0.1", 8081, EchoServer
  EventMachine::start_server "127.0.0.1", 8082, EchoServer
  puts "echos on 8081 and 8082 started."

  # periodic timer check - every 1 sec
  EventMachine.add_periodic_timer(1) {
    if $check_ok
      EventMachine::start_server "127.0.0.1", 8083, EchoServer
      $check_ok = false
      puts "echo on 8083 started!"
    end
  }
  # timer triggered after 10 secs - only once!
  EventMachine.add_timer(10) {
    $check_ok = true
    puts "checker var is #{$check_ok} now!"
  }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,端口8083上的echo服务器在应用程序启动后约10秒启动.尝试telnet localhost 8083在此计时器之前和之后,您将看到效果.

每1/100秒检查也可以使用低于1秒的值,如0.01.

这可能是您自己想法的起点.周期性计时器是您的内部循环,您可以在其中挂钩您的条件检查以启动更多服务.


好教程(PDF):eventmachine介绍(博客文章)