2009-10-21 21 views
2

我通過實現最基本的服務器測試了GServer的性能,並檢查了它可以處理的每秒請求數。結果是81.與我的最基本的TCPSocket服務器可以處理的每秒9900個請求相比,這非常慢。我做錯了什麼或是GServer真的這麼慢?Ruby 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服務器implementaion:

require 'socket' 
server = TCPServer.open(1234) 
loop { 
    client = server.accept 
    puts client.gets 
    client.puts('a') 
    client.close 
} 

回答

5

你應該通過更換得到顯著加速(從我的測試中大約30倍)

loop {break if server.stopped? }

server.join

話雖這麼說,GServer使用線程並很可能會比單線程的基於事件的服務器慢。

+0

不錯,這給了我90倍的改善。謝謝! – Peder 2009-10-22 17:19:16