使用事件机器生成qr代码

时间:2015-05-12 14:33:43

标签: ruby qr-code eventmachine

我正在开发基于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

2 个答案:

答案 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秒。