This commit is contained in:
Redkale
2018-01-30 13:39:27 +08:00
parent c5260584fa
commit e405c4dc15
3 changed files with 13 additions and 1 deletions

View File

@@ -779,6 +779,15 @@ public abstract class WebSocket<G extends Serializable, T> {
return this._runner == null ? 0 : this._runner.lastSendTime;
}
/**
* 获取最后一次读取消息的时间
*
* @return long
*/
public long getLastReadTime() {
return this._runner == null ? 0 : this._runner.lastReadTime;
}
/**
* 获取最后一次发送PING消息的时间
*

View File

@@ -103,7 +103,7 @@ public class WebSocketEngine {
final int intervalms = liveinterval * 1000;
scheduler.scheduleWithFixedDelay(() -> {
long now = System.currentTimeMillis();
getLocalWebSockets().stream().filter(x -> (now - x.getLastSendTime()) > intervalms).forEach(x -> x.sendPing());
getLocalWebSockets().stream().filter(x -> (now - x.getLastReadTime()) > intervalms).forEach(x -> x.sendPing());
}, delay, liveinterval, TimeUnit.SECONDS);
if (logger.isLoggable(Level.FINEST)) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(wsmaxconns:" + wsmaxconns + ", delay:" + delay + "s, interval:" + liveinterval + "s) scheduler executor");
}

View File

@@ -47,6 +47,8 @@ class WebSocketRunner implements Runnable {
private final BiConsumer<WebSocket, Object> restMessageConsumer; //主要供RestWebSocket使用
protected long lastSendTime;
protected long lastReadTime;
WebSocketRunner(Context context, WebSocket webSocket, BiConsumer<WebSocket, Object> messageConsumer, AsyncConnection channel) {
this.context = context;
@@ -83,6 +85,7 @@ class WebSocketRunner implements Runnable {
return;
}
if (readBuffer == null) return;
lastReadTime = System.currentTimeMillis();
readBuffer.flip();
WebSocketPacket onePacket = null;