【问题标题】:bayeux long polling comet ~ failed while using Proxy贝叶长轮询彗星〜使用代理失败
【发布时间】:2013-07-12 12:44:17
【问题描述】:

我正在尝试在 SalesForce 中使用 Streaming API,它基本上是使用 Comet / Long Polling 技术实现的。在客户端,我们使用 Java 和 jetty-http 、bayeux-api 、 cometd-java-client

如果我们在没有代理的情况下运行应用程序,一切都会完美运行。 但是如果客户端使用网络代理

A.它能够进行用户身份验证

B.长轮询握手成功

C. meta/connect 最初有 402 错误(请参阅下面的日志)但最终成功

D. 永远不要从服务器端得到任何响应

有没有想过这里发生了什么,为什么代理会导致这种情况,即使上面 A、B、C 中的所有 HTTP 连接请求都成功?

[12:23:50.504-HttpClient-21][CHANNEL:META_CONNECT]: {"id":"5","error":"402::Unknown client","successful":false,"advice":{"interval":500,"reconnect":"handshake"},"channel":"/meta/connect","clientId":"jj1ajqshe3lkkpp1rsiy5g30ppey"}
[12:23:50.504-HttpClient-21][CHANNEL:META_CONNECT] Error : 402::Unknown client
[12:23:51.760-HttpClient-23][CHANNEL:META_HANDSHAKE]: {"id":"6","minimumVersion":"1.0","supportedConnectionTypes":["long-polling"],"successful":true,"channel":"/meta/handshake","clientId":"ingkpdlgu6uy43m06ei30spqpl","version":"1.0"}
[12:23:53.170-HttpClient-19][CHANNEL:META_CONNECT]: {"id":"7","error":"402::Unknown client","successful":false,"advice":{"interval":500,"reconnect":"handshake"},"channel":"/meta/connect","clientId":"ingkpdlgu6uy43m06ei30spqpl"}
[12:23:53.170-HttpClient-19][CHANNEL:META_CONNECT] Error : 402::Unknown client
[12:23:54.408-HttpClient-22][CHANNEL:META_HANDSHAKE]: {"id":"8","minimumVersion":"1.0","supportedConnectionTypes":["long-polling"],"successful":true,"channel":"/meta/handshake","clientId":"fr1r22f6au89xpm1lbucrp26fs27","version":"1.0"}
[12:24:00.757-HttpClient-19][CHANNEL:META_CONNECT]: {"id":"9","successful":true,"advice":{"interval":0,"reconnect":"retry","timeout":110000},"channel":"/meta/connect","clientId":"fr1r22f6au89xpm1lbucrp26fs27"}
[12:24:07.051-HttpClient-19][CHANNEL:META_CONNECT]: {"id":"10","successful":true,"channel":"/meta/connect","clientId":"fr1r22f6au89xpm1lbucrp26fs27"}
[12:24:13.348-HttpClient-22][CHANNEL:META_CONNECT]: {"id":"11","successful":true,"channel":"/meta/connect","clientId":"fr1r22f6au89xpm1lbucrp26fs27"}
[12:24:19.643-HttpClient-18][CHANNEL:META_CONNECT]: {"id":"12","successful":true,"channel":"/meta/connect","clientId":"fr1r22f6au89xpm1lbucrp26fs27"}
[12:24:25.935-HttpClient-18][CHANNEL:META_CONNECT]: {"id":"13","successful":true,"channel":"/meta/connect","clientId":"fr1r22f6au89xpm1lbucrp26fs27"}
[12:24:33.429-HttpClient-24][CHANNEL:META_CONNECT]: {"id":"14","successful":true,"channel":"/meta/connect","clientId":"fr1r22f6au89xpm1lbucrp26fs27"}

【问题讨论】:

  • 这里也一样。我正在使用 mitmproxy 来探索另一个使用 cometd 的应用程序,并且必须禁用缓冲才能使其正常工作。如果应用在 TLS 中强制执行身份验证,您可能还需要将代理 ca 源导入 ssl 受信任的 CA。

标签: streaming comet long-polling bayeux


【解决方案1】:

可能是代理正在缓冲响应。它发生例如使用 nginx 和 proxy_buffering on 指令。

【讨论】:

  • 您好,我在使用 Glassfish 4.1 实现 Grizzly Comet 时遇到了同样的问题。这是唯一清楚地描述问题和可能的解决方案的问答。如何关闭 Glassfish 上的 proxy_buffering 指令?提前致谢。
  • @qualebs 如果您在 Glassfish 前面有一些代理,这适用
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2011-11-16
  • 1970-01-01
  • 2011-03-27
相关资源
最近更新 更多