This commit is contained in:
@@ -779,6 +779,15 @@ public abstract class WebSocket<G extends Serializable, T> {
|
|||||||
return this._runner == null ? 0 : this._runner.lastSendTime;
|
return this._runner == null ? 0 : this._runner.lastSendTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取最后一次读取消息的时间
|
||||||
|
*
|
||||||
|
* @return long
|
||||||
|
*/
|
||||||
|
public long getLastReadTime() {
|
||||||
|
return this._runner == null ? 0 : this._runner.lastReadTime;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取最后一次发送PING消息的时间
|
* 获取最后一次发送PING消息的时间
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ public class WebSocketEngine {
|
|||||||
final int intervalms = liveinterval * 1000;
|
final int intervalms = liveinterval * 1000;
|
||||||
scheduler.scheduleWithFixedDelay(() -> {
|
scheduler.scheduleWithFixedDelay(() -> {
|
||||||
long now = System.currentTimeMillis();
|
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);
|
}, 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");
|
if (logger.isLoggable(Level.FINEST)) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(wsmaxconns:" + wsmaxconns + ", delay:" + delay + "s, interval:" + liveinterval + "s) scheduler executor");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,6 +48,8 @@ class WebSocketRunner implements Runnable {
|
|||||||
|
|
||||||
protected long lastSendTime;
|
protected long lastSendTime;
|
||||||
|
|
||||||
|
protected long lastReadTime;
|
||||||
|
|
||||||
WebSocketRunner(Context context, WebSocket webSocket, BiConsumer<WebSocket, Object> messageConsumer, AsyncConnection channel) {
|
WebSocketRunner(Context context, WebSocket webSocket, BiConsumer<WebSocket, Object> messageConsumer, AsyncConnection channel) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.engine = webSocket._engine;
|
this.engine = webSocket._engine;
|
||||||
@@ -83,6 +85,7 @@ class WebSocketRunner implements Runnable {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (readBuffer == null) return;
|
if (readBuffer == null) return;
|
||||||
|
lastReadTime = System.currentTimeMillis();
|
||||||
readBuffer.flip();
|
readBuffer.flip();
|
||||||
|
|
||||||
WebSocketPacket onePacket = null;
|
WebSocketPacket onePacket = null;
|
||||||
|
|||||||
Reference in New Issue
Block a user