【发布时间】:2017-05-20 06:34:47
【问题描述】:
我在我的应用程序中使用 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 连接断开” - 据我所知,应该可以使用 websockets,因为它们通过 TCP 工作。
有一个方法session.setMaxIdleTimeout(long):
设置此会话之前的非零毫秒数 如果容器处于非活动状态,则由容器关闭,即也没有消息 发送或接收。值为 0 或负数表示会话 永远不会因为不活动而超时。
但我真的不确定这是否是我想要的(是吗?)。那么如何像我使用 javax.websocket API 描述的那样设置超时?
【问题讨论】: