由于传输层/meta/connect调用,使用faye/nodejs在Firefox / chrome上的初始页面加载时



我在 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 通道时,将调用这些方法。

最新更新