我有一个启动xmpp4r客户端的初始值设定项。当我将 puma 服务器作为常规进程运行时,它工作正常。但是当我将 puma 作为守护程序(-d 选项(启动时,它会工作几秒钟并与 xmpp 服务器断开连接。我有单独的线程来处理重新连接,但是当 puma 是守护程序时它不起作用。
def init_reconnection_timer
timers = Timers::Group.new
periodic_timer = timers.every(5) do
if @client.is_disconnected?
begin
Rails.logger.info "XmppConnector ##### reconnecting to #{APP_CONFIG['broker_address']} ..."
connect
Rails.logger.info "XmppConnector ##### connected!"
presence
rescue
end
end
end
Thread.new do
loop do
timers.wait
end
end
end
当 puma 是一个守护程序时,我在日志中的这段代码中没有任何内容。在rails应用程序启动后,它会工作几秒钟,像往常一样接收消息,智商,没有错误。然后默默地断开连接。这是我类的构造函数:
class XmppConnector
include Singleton
def initialize
@jid = Jabber::JID::new(APP_CONFIG['broker_username'] + '@' + APP_CONFIG['broker_address'])
@jid.resource='rails'
@client = Jabber::Client::new(@jid)
connect
init_presence_callback
init_message_callback
init_iq_callback
init_reconnection_timer
init_subscription_requests
presence
@protocol_interface = RemoteInterface.new
Rails.logger.info "XmppConnector ##### initialized"
end
但是当美洲狮在没有 -d 选项的情况下运行时 - 完全没有问题。在开发和生产中也是如此,我的工作站和服务器。红宝石 2.0.0彪马 2.9.2 最小线程数: 0, 最大线程数: 16轨道 4.2.0beta4
puma 中有一个关于初始值设定项中线程的错误,现在它已修复 https://github.com/puma/puma/issues/617