我正在开发基于EventMachine echo服务器的API。它侦听特定端口上的请求并返回带有qr-code的html-page,它是根据请求查询中的参数生成的。问题是,将字符串打包到qr-code中的评估方法需要8到11秒,这是不可接受的。我不知道它为什么会发生,除非它可能与事件机器相关联。
P.S。在irb中,相同的代码RQRCode::QRCode.new(my_string, :size => 10,:level => :l)
只需不到1秒。
我尝试了两种不同的宝石:rqrcode和barby + rqrcode。两者都显示相同的结果。
代码示例:
require 'eventmachine'
require 'rqrcode'
class Handler < EventMachine::Connection
def receive_data(data)
puts Time.now
qrcode = RQRCode::QRCode.new('some_string', :size => 10,:level => :l)
puts Time.now
return qrcode
end
end
EventMachine::run {
EventMachine::start_server("0.0.0.0", 8081, Handler)
puts "Listening..."
}
输出:
2015-05-12 18:03:38 +0300
2015-05-12 18:03:48 +0300
答案 0 :(得分:0)
您似乎需要致电Common
。这是EventMachine的echo server example
from classes.Common import Common
Common.log_file_path = 'C:/logging/output.txt'
from classes.Directory import Directory
from classes.Logger import Logger
如果您的时间戳总是(差不多)相隔10秒,我会打赌请求因为超时而不是因为响应而结束。在回复QR数据后,请致电close_connection
让浏览器知道您已正确完成。
修改您似乎还没有致电 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 # <---- This is what you're missing -----
end
def unbind
puts "-- someone disconnected from the echo server!"
end
end
# Note that this will block current thread.
EventMachine.run {
EventMachine.start_server "127.0.0.1", 8081, EchoServer
}
(并引用close_connection
而不是send_data
)。看起来您需要使用Tume
,而不是Time
。您的代码片段是否在您的服务器上实际运行?
更新在调试模式下运行会大大减慢QR的生成速度。
答案 1 :(得分:0)
问题是我从RubyMine以调试模式运行服务器。从控制台启动服务器解决了问题,qr代码生成大约需要1秒。