2

/meta/connect 呼び出しが原因で、最初のページの読み込み時にページが長時間読み込まれているように見える faye/nodejs で奇妙な問題が発生しています。このページの読み込みは、正確に 45 秒間続くようです (これは、サーバーに設定されたタイムアウトの値です)。

通話の詳細は次のとおりです。

問題の呼び出しは次のとおりです。

RAW GET: 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__

params: jsonp: __jsonp3__ message: [{"channel":"/meta/connect","clientId":"0c3gocq1rwi3sl0dskn4u00e8wj7","connectionType":"callback-polling","id":"5"}]

応答: __jsonp3__([{"id":"5","clientId":"0c3gocq1rwi3sl0dskn4u00e8wj7","channel":"/meta/connect","successful":true,"advice":{"reconnect":"retry ","間隔":0,"タイムアウト":45000}}]);

SSL なしで試してみましたが、問題は解決していないため、それとは関係がないようです。

この間、ページは完全に応答しますが、ff または chrome で読み込みバーが表示されるだけで、続行する前に停止するまで 45 秒間待機することになるため、顧客にとっては明らかに問題です。この問題をデバッグまたは軽減するための助けをいただければ幸いです。最初の接続呼び出しを非同期にして、最初のページの読み込み時にトリガーされないようにする可能性がありますか?

faye google グループにも投稿しました: https://groups.google.com/forum/?fromgroups#!topic/faye-users/xZI4adt3DpA%5B1-25%5D

しかし、この問題を抱えているのは私だけではないようですが、まだ返信がありません.

どんな助けでも大歓迎です。

ありがとう!

ケビン

4

3 に答える 3

1

将来の Google 社員がこのトピックに遭遇した場合に備えて: 問題の問題は Faye の新しいバージョンで解決されています。私の元の質問には、Google グループ リンクに関する詳細がいくつかあります。

これで問題が解決したことを確認できます。ページの読み込みでタイムアウトが発生しなくなりました。

于 2012-11-28T09:21:49.120 に答える
0

end()送信している応答を ing していないように聞こえるため、サーバーは接続を開いたままにしています。

于 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 に答える