在单个事件机器中运行多个服务器是否可能?
我的意思是,一个单独的客户端连接可以同时使用多个服务。例如,登录服务器验证用户,然后用户可以同时使用聊天室和简单的游戏(如跳棋)与单个客户端套接字并发?
还是说我需要为每个服务使用多个eventmachine反应器?
在单个事件机器中运行多个服务器是否可能?
我的意思是,一个单独的客户端连接可以同时使用多个服务。例如,登录服务器验证用户,然后用户可以同时使用聊天室和简单的游戏(如跳棋)与单个客户端套接字并发?
还是说我需要为每个服务使用多个eventmachine反应器?
#!/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
}
这里提供了三个使用不同端口的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!"
}
}
EM.add_periodic_timer
,以每x秒检查是否满足某个条件并且必须启动新的EM服务器,但尚未测试。 - asaaki