我通过实现最基本的服务器测试了GServer的性能,并检查了它可以处理的每秒请求数。结果是81.与我最基本的TCPSocket服务器可以处理的每秒9900个请求相比,这是非常慢的。我做错了还是GServer真的这么慢?
客户端实施:
require 'socket'
tStart = Time.now
u = 0
while Time.now - tStart<5
socket = TCPSocket.open('localhost', 1234)
socket.puts 'a'
socket.gets
socket.close
u += 1
end
puts u.to_s
GServer实施:
require 'gserver'
class JServer < GServer
def initialize(*args)
super(*args)
end
def serve( io )
io.gets
io.puts( 'a' )
end
end
server = JServer.new(1234)
server.start
loop { break if server.stopped? }
TCPSocket服务器实现:
require 'socket'
server = TCPServer.open(1234)
loop {
client = server.accept
puts client.gets
client.puts( 'a' )
client.close
}
答案 0 :(得分:5)
通过替换
,您应该获得显着的加速(大约是我测试的30倍)loop {break if server.stopped? }
与
server.join
话虽这么说,GServer使用线程,可能比单线程基于事件的服务器慢。