Ruby GServer 性能

标签 ruby performance

我通过实现最基本的服务器来测试 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
}

最佳答案

通过替换,您应该会获得显着的加速(根据我的测试,大约提高了 30 倍)

loop { break if server.stopped? }

server.join

话虽这么说,GServer 使用线程,并且可能比单线程基于事件的服务器慢。

关于Ruby GServer 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598859/

相关文章:

ruby - ruby 中的线程安全

ruby - 从源代码安装 Ruby1.9 时找不到 OpenSSL header /库

ruby - ruby 中的打印功能

mysql - Rails - 跨多个关系有效地提取和计算数据

javascript - 加载 html5 Canvas 中的所有颜色非常缓慢

mysql - InnoDB 行级锁定性能 - 多少行?

ruby-on-rails - Rails 指南第 5.12 节的 UrlGenerationError

python - 如何避免使用日期时间列的 pandas mean() 性能不佳

c# - 与非托管代码相比,在 TCP/UDP 套接字上读取/写入大量数据时托管代码是否存在性能损失?

mysql - 我从 postgres 切换到 mysql 数据库并收到错误