【发布时间】:2018-08-07 09:31:28
【问题描述】:
我在项目中使用Spring Websocket,发现ConcurrentWebSocketSessionDecorator在超出bufferSizeLimit时停止了,但是没有办法恢复。
我是这样用的:
try {
if (concurrentWebSocketSessionDecorator.isOpen()) {
concurrentWebSocketSessionDecorator.sendMessage(message);
}
} catch (SessionLimitExceededException se) {
logger.warn("sendMessage exceed limit: ", se);
// TODO flush buffer
} catch (IOException ie) {
logger.error("sendMessage failed: ", ie);
}
我看了concurrentWebSocketSessionDecorator的代码,方法checkSessionLimits设置limitExceeded=true并抛出SessionLimitExceededException超出缓冲区大小,但我找不到任何设置 limitExceeded=false 的方法。如何刷新缓冲区并重置 limitExceeded?
public void sendMessage(WebSocketMessage<?> message) throws IOException {
if (shouldNotSend()) {
return;
}
this.buffer.add(message);
this.bufferSize.addAndGet(message.getPayloadLength());
do {
if (!tryFlushMessageBuffer()) {
if (logger.isTraceEnabled()) {
String text = String.format("Another send already in progress: " +
"session id '%s':, \"in-progress\" send time %d (ms), buffer size %d bytes",
getId(), getTimeSinceSendStarted(), getBufferSize());
logger.trace(text);
}
checkSessionLimits();
break;
}
}
while (!this.buffer.isEmpty() && !shouldNotSend());
}
【问题讨论】:
标签: java spring websocket concurrency spring-websocket