Java 使WebSocket发送不阻塞
Jetty使用org.eclipse.Jetty.websocket.common.BlockingWriteCallback通过websocket发送消息。如果客户端“速度慢”,则此阻塞写入可能会遇到挂起(例如,请参见此处) 我使用Jetty+Spring+Spring的Websocket客户端成功模拟了慢速客户端 我想“发送并忘记”websocket消息,所以如果客户端速度慢(无论它尝试做什么确认),这都不会影响BrokerWriteCallback的解析。使用Jetty(配置或源代码编辑)实现这一点的最佳方法是什么 当前Jetty版本9.3.11.v20160721与Spring 4.3.3一起使用。Jetty已经进行了测试 没有“发送并忘记”这样的东西,因为这意味着无限缓冲 有非阻塞发送选项,但强烈建议您注意Java 使WebSocket发送不阻塞,java,websocket,jetty,stomp,spring-websocket,Java,Websocket,Jetty,Stomp,Spring Websocket,Jetty使用org.eclipse.Jetty.websocket.common.BlockingWriteCallback通过websocket发送消息。如果客户端“速度慢”,则此阻塞写入可能会遇到挂起(例如,请参见此处) 我使用Jetty+Spring+Spring的Websocket客户端成功模拟了慢速客户端 我想“发送并忘记”websocket消息,所以如果客户端速度慢(无论它尝试做什么确认),这都不会影响BrokerWriteCallback的解析。使用Jetty(配置或源代码编辑)
未来
或回调
,以了解本地端点是否已成功发送该消息
提示:如果前一条消息尚未成功,则不要向RemoteEndpoint发送另一条消息(您需要处理网络拥塞决策)
不注意未来
或回调
将触发内存错误(OOM)
见:
- void(ByteBuffer数据,WriteCallback回调)
- 未来(ByteBuffer数据)
- void(字符串文本,WriteCallback回调)
- 未来(字符串文本)
如果所有这些看起来都是压倒性的,请考虑使用WebStutts之上的许多库中的一个来管理这一切。
我鼓励您看看开源项目谢谢!你能详细说明你所遇到的问题吗?假设我使用回调发送字符串。当客户端收到消息时,或者当消息“写入网络”,但没有客户端的确认时,回调会返回吗?老实说,我还不知道底层沟通到底是如何运作的,我也很欣赏关于这一点的有用见解。如果客户端“挂起”(接收失败),则线程被阻塞。理想情况下,我希望我的程序能够向其他客户发送数据。由于某些原因,目前我使用单线程发送(只有一个线程可以调用Jetty)