gpt4 book ai didi

javax.websocket - 传递消息超时

转载 作者:行者123 更新时间:2023-11-30 06:57:43 26 4
gpt4 key购买 nike

我在我的应用程序中使用 javax.websocket API。我像这样从服务器向客户端发送消息:

Future<Void> messageFuture = session.getAsyncRemote().sendText(message);
messageFutures.add(messageFuture); // List<Future<Void>> messageFutures

我使用异步API,因为我真的很关心性能,不能让服务器等待每条消息传递,因为服务器会这样做:

for (i = 1..N) {
result = doStuff()
sendMessage(result)
}

因此不可能每次迭代都等待消息传递。

发送所有消息后,我需要等待所有 Future 完成(所有消息均已传递)。为了安全起见,我需要使用一些超时,例如“如果服务器向客户端发送消息并且客户端在 30 秒内未确认接收,则考虑 websocket 连接中断” - 据我所知,应该可以使用 websocket 来完成,因为它们通过 TCP 工作。

有一个方法session.setMaxIdleTimeout(long):

Set the non-zero number of milliseconds before this session will be closed by the container if it is inactive, ie no messages are either sent or received. A value that is 0 or negative indicates the session will never timeout due to inactivity.

但我真的不确定这是否是我想要的(是吗?)。那么如何使用 javax.websocket API 设置像我描述的那样的超时?

最佳答案

空闲超时可以满足您的情况,但它的设计目的并非如此。空闲超时更多地适用于客户端建立连接但不经常使用的情况。

用于检查发送超时的更精确功能是 setAsyncSendTimeout

使用这两种方法可以让您针对客户端可能一次让连接空闲几分钟但服务器期望相对快速的消息确认的情况进行配置。

<小时/>

根据我使用 Spring 的经验,Spring 提供的超时实现实际上是不可配置的。请参阅How do you quickly close a nonresponsive websocket in Java Spring Tomcat?我不确定这是否适用于您的 websocket 实现。

关于javax.websocket - 传递消息超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41489741/

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