使WebSocket发送非阻塞

时间:2017-04-06 14:12:44

标签: java websocket jetty stomp spring-websocket

Jetty使用 org.eclipse.jetty.websocket.common.BlockingWriteCallback 通过websocket发送消息。如果客户端“慢”,则此阻止写入可能会遇到挂起(请参阅此处https://github.com/eclipse/jetty.project/issues/272#issuecomment-290910610

我使用Jetty + Spring + Spring的Websocket Client成功模拟了慢客户端。

我想“发送并忘记”websocket消息,因此如果客户端很慢(无论它尝试做什么确认),这都不会影响BrokerWriteCallback的解析。使用Jetty(配置或源代码编辑?)

实现这一目标的最佳方法是什么?

目前与Spring 4.3.3一起使用的Jetty版本9.3.11.v20160721。

1 个答案:

答案 0 :(得分:1)

Jetty已经进行了slow serverslow client次测试。

没有"发送和忘记",因为这意味着无限缓冲。

有非阻止发送选项,但强烈鼓励您注意export PATH=$PATH:/usr/local/bin/ Futures以了解本地端点是否已成功发送该选项消息(或不)。

  

提示:如果前一个消息尚未成功(您有网络拥塞决策需要处理),请不要向RemoteEndpoint发送另一条消息。

未注意CallbacksFutures 触发内存错误(OOM)。

请参阅RemoteEndpoint

如果所有这些看起来都是压倒性的,请考虑使用在websocket之上构建的众多库中的一个来管理所有这些。

我建议您查看开源项目cometd.org