我正在尝试将 WebSockets 用作应用程序协议(这里没有浏览器)并且遇到了流控制问题......我目前正在使用带有 WebSocketServlet 和 @WebSocket 的 Jetty 9.1.0.RC0。
第一种情况是消息进来的速度比我处理它们的速度快。在这种情况下,我想暂停从该套接字读取并让 TCP 背压来做它的事情。这在以前的应用程序(当然非 websocket)中效果很好。我认为 Session.suspend() 可能会做我想做的事,但它似乎没有影响,并且返回的令牌为空。
有没有办法怀疑阅读?作为基于 nio 的连接器,Jetty 将继续读取帧并缓冲它们,直到我可以处理它们为止,我宁愿暂停读取,也不必引入一些流控制消息。
我的第二种情况是我向连接的客户端发送 websocket 消息 - 这可能是一个浏览器,但并非总是如此......看来我可以通过使用 sendStringByFuture 方法获得一些流量控制,但是有没有办法获得一个未来完成时回调,而不是等待它或轮询它?
由于我已经嵌入了 jetty 并将其用于 SpringMVC,因此如果我能获得所需的流控制,以避免在另一个端口上运行类似 Netty 的东西,那就太好了。
谢谢。