2

我对 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","successful":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

但是我还没有得到回复,虽然看起来我不是唯一一个有这个问题的人。

任何帮助表示赞赏。

谢谢!

凯文

4

3 回答 3

1

以防万一任何未来的谷歌人偶然发现这个话题:这个问题已经在新版本的 Faye 中得到解决。在我原来的问题中有一些关于 google group 链接的更多细节 - 这个问题应该从 faye 0.8.4(目前是 0.8.6)开始修复

我可以确认这解决了我的问题,我不再看到页面加载有任何超时。

于 2012-11-28T09:21:49.120 回答
0

听起来您没有end()发出您发送的响应,因此您的服务器保持连接打开。

于 2012-08-18T02:09:28.380 回答
0

发送到通道 /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 通道时,会调用这些方法。

于 2012-11-19T21:09:27.347 回答