Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使WebSocket发送不阻塞_Java_Websocket_Jetty_Stomp_Spring Websocket - Fatal编程技术网

Java 使WebSocket发送不阻塞

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(配置或源代码编辑)

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已经进行了测试

没有“发送并忘记”这样的东西,因为这意味着无限缓冲

有非阻塞发送选项,但强烈建议您注意
未来
回调
,以了解本地端点是否已成功发送该消息

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

不注意
未来
回调
将触发内存错误(OOM)

见:

  • void(ByteBuffer数据,WriteCallback回调)
  • 未来(ByteBuffer数据)
  • void(字符串文本,WriteCallback回调)
  • 未来(字符串文本)

如果所有这些看起来都是压倒性的,请考虑使用WebStutts之上的许多库中的一个来管理这一切。


我鼓励您看看开源项目

谢谢!你能详细说明你所遇到的问题吗?假设我使用回调发送字符串。当客户端收到消息时,或者当消息“写入网络”,但没有客户端的确认时,回调会返回吗?老实说,我还不知道底层沟通到底是如何运作的,我也很欣赏关于这一点的有用见解。如果客户端“挂起”(接收失败),则线程被阻塞。理想情况下,我希望我的程序能够向其他客户发送数据。由于某些原因,目前我使用单线程发送(只有一个线程可以调用Jetty)