From e405c4dc15134a3544b0dbe4d8323523ade97650 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Tue, 30 Jan 2018 13:39:27 +0800 Subject: [PATCH] --- src/org/redkale/net/http/WebSocket.java | 9 +++++++++ src/org/redkale/net/http/WebSocketEngine.java | 2 +- src/org/redkale/net/http/WebSocketRunner.java | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/org/redkale/net/http/WebSocket.java b/src/org/redkale/net/http/WebSocket.java index c307d0be3..b1c332e5d 100644 --- a/src/org/redkale/net/http/WebSocket.java +++ b/src/org/redkale/net/http/WebSocket.java @@ -779,6 +779,15 @@ public abstract class WebSocket { return this._runner == null ? 0 : this._runner.lastSendTime; } + /** + * 获取最后一次读取消息的时间 + * + * @return long + */ + public long getLastReadTime() { + return this._runner == null ? 0 : this._runner.lastReadTime; + } + /** * 获取最后一次发送PING消息的时间 * diff --git a/src/org/redkale/net/http/WebSocketEngine.java b/src/org/redkale/net/http/WebSocketEngine.java index d94c60af8..de1835f02 100644 --- a/src/org/redkale/net/http/WebSocketEngine.java +++ b/src/org/redkale/net/http/WebSocketEngine.java @@ -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"); } diff --git a/src/org/redkale/net/http/WebSocketRunner.java b/src/org/redkale/net/http/WebSocketRunner.java index 145f00245..1d2403218 100644 --- a/src/org/redkale/net/http/WebSocketRunner.java +++ b/src/org/redkale/net/http/WebSocketRunner.java @@ -47,6 +47,8 @@ class WebSocketRunner implements Runnable { private final BiConsumer restMessageConsumer; //主要供RestWebSocket使用 protected long lastSendTime; + + protected long lastReadTime; WebSocketRunner(Context context, WebSocket webSocket, BiConsumer 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;