我在 faye/nodejs 上遇到了一个奇怪的问题,由于/meta/connect 调用,页面在初始页面加载时似乎加载了很长时间。 此页面加载似乎持续正好 45 秒(这是服务器上设置的超时值)
以下是通话的详细信息:
有问题的呼叫如下:
原始获取:https://MYURL.com:8089/notifications?message=%5B%7B%22channel%22%3A%22%2Fmeta%2Fconnect%22%2C%22clientId%22%3A%220c3gocq1rwi3sl0dskn4u00e8wj7%22%2C%22connectionType%22%3A%22callback-polling%22%2C%22id%22%3A%225%22%7D%5D&jsonp=__jsonp3__
参数:JSONP: __jsonp3__消息: [{"channel":"/meta/connect","clientId":"0c3gocq1rwi3sl0dskn4u00e8wj7","connectionType":"callback-polling","id":"5"}]
响应:__jsonp3__([{"id":"5","clientId":"0c3gocq1rwi3sl0dskn4u00e8wj7","channel":"/meta/connect","success":true,"advice":{"reconnect":"retry","interval":0,"timeout":45000}}]);
我已经在没有SSL的情况下尝试过,但问题仍然存在,因此似乎与此无关。
在此期间,该页面完全响应,但这显然对我的客户来说是一个问题,因为他们只看到 ff 或 chrome 中的加载栏,他们最终等待整整 45 秒让它停止,然后再继续。 感谢在调试或缓解此问题方面的任何帮助;可能使初始连接调用异步,因此它不会在初始页面加载时触发?
我也在faye google群组上发帖:https://groups.google.com/forum/?fromgroups#!topic/faye-users/xZI4adt3DpA%5B1-25%5D
但我还没有得到答复,尽管似乎我不是唯一一个有这个问题的人。
任何帮助,不胜感激。
谢谢!
凯文
一未来的谷歌员工偶然发现了这个话题:有问题的问题已经在新版本的 Faye 中得到解决。 在我的原始问题中,有关Google组链接的一些更多详细信息-该问题应从faye 0.8.4(当前为0.8.6)开始修复
我可以确认这为我解决了问题,我不再看到页面加载有任何超时。
听起来你没有end()
你发送的响应,所以你的服务器保持连接打开。
发送到通道/meta/connect 时,请将以下内容添加到您的参数中:
"advice":{"timeout": 0}
因此,您的连接消息应如下所示:
{"channel":"/meta/connect","clientId":"0c3gocq1rwi3sl0dskn4u00e8wj7","connectionType":"callback-polling","id":"5","advice":{"timeout":0}}
你可以按照我的解决方案从这个地方开始:
# server.rb
@engine.connect(response['clientId'], message['advice']) do |events|
callback.call([response] + events)
end
...
# proxy.rb
def connect(client_id, options = {}, &callback)
debug 'Accepting connection from ?', client_id
@engine.ping(client_id)
conn = connection(client_id, true)
conn.connect(options, &callback)
@engine.empty_queue(client_id)
end
...
# connection.rb
def connect(options, &block)
options = options || {}
timeout = options['timeout'] ? options['timeout'] / 1000.0 : @engine.timeout
set_deferred_status(:deferred)
callback(&block)
begin_delivery_timeout
begin_connection_timeout(timeout)
end
当消息到达/meta/connect 通道时,将调用这些方法。