gpt4 book ai didi

java - 断开单个客户端会断开许多其他客户端

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:06:26 25 4
gpt4 key购买 nike

我正在我们的预生产环境中测试 Diffusion 解决方案。该解决方案为匿名客户提供 10 分钟的免费访问时间,然后他们必须进行身份验证或断开连接。这在开发和早期测试中运行良好,但在一个客户端断开连接的预生产中,我们看到许多其他客户端无故同时断开连接。一旦将日志记录设置为 FINEST,日志文件就会显示:

2016-03-21 11:57:36.557|DEBUG|Diffusion: InboundThreadPool Thread_4||NIOBufferedChannel@52e2a219[connected local=/10.0.4.1:8080 remote=/10.0.1.99:58673] : Closed(UNEXPECTED_ERROR) Unexpected error EOF|com.pushtechnology.diffusion.io.message.MessageChannelException
2016-03-21 11:57:36.558|DEBUG|Diffusion: InboundThreadPool Thread_4||Java Client 50328FF242799CD4-000000000000015A AWAITING_RECONNECTION@10.0.1.99: State changed from CONNECTED to AWAITING_RECONNECTION.|com.pushtechnology.diffusion.clients.impl.ClientImpl
2016-03-21 11:57:36.558|DEBUG|Diffusion: InboundThreadPool Thread_4||Java Client 50328FF242799CD4-000000000000015A AWAITING_RECONNECTION@10.0.1.99: CONNECTION_LOST keeping alive for 60000 ms.|com.pushtechnology.diffusion.clients.impl.ClientImpl

受影响的客户端始终是浏览器,而不是智能手机。通常是较旧的浏览器,例如 IE9。

最佳答案

我猜您的预生产环境有一个设置为使用连接池的负载平衡器。 v10 之前的 IE 版本不支持 WebSockets,因此它们将使用 XHR 长轮询。您的智能手机客户端也将使用 WebSockets,因此不会受到影响。

手册在 "Considerations when using load balancers" 节中有此说明

不要对负载平衡器和 Diffusion 服务器之间的连接使用连接池。如果多个客户端连接通过单个服务器端连接进行多路复用,这可能会导致客户端连接过早关闭。

在 Diffusion 中,客户端在连接的生命周期内与单个 TCP/HTTP 连接相关联。如果 Diffusion 服务器关闭客户端,连接也会关闭。 Diffusion 不区分单个客户端连接和多路复用连接,因此当共享多路复用连接的客户端关闭时,负载均衡器和 Diffusion 之间的连接也关闭,随后所有客户端连接通过该服务器端多路复用连接已关闭。

为了说明问题。当 Diffusions 服务器与其观众 Alice、Bob 和 Charlie 直接连接时,关闭 Bob 的连接是直接的

Diffusion and audience with no load balancer

当连接池中间盒(代理或负载均衡器)进入组合时,关闭 Bob 的连接会导致 Alice 和 Charlie 也断开连接。

Diffusion and audience with connection-pooling middlebox

因此,虽然连接池对于常规 HTTP 服务器来说是个好主意,但如果它需要断开离散客户端的连接,那么对于娱乐 XHR 轮询客户端观众的 Diffusion 服务器来说就会出现问题。

关于java - 断开单个客户端会断开许多其他客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36134541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com