diff --git a/src/com/wentch/redkale/net/http/WebSocketEngine.java b/src/com/wentch/redkale/net/http/WebSocketEngine.java index 9af713c86..640228680 100644 --- a/src/com/wentch/redkale/net/http/WebSocketEngine.java +++ b/src/com/wentch/redkale/net/http/WebSocketEngine.java @@ -11,6 +11,7 @@ import com.wentch.redkale.util.*; import java.io.*; import java.util.*; import java.util.concurrent.*; +import java.util.concurrent.atomic.*; import java.util.logging.*; /** @@ -19,6 +20,10 @@ import java.util.logging.*; */ public final class WebSocketEngine { + private static final AtomicInteger sequence = new AtomicInteger(); + + private final int index; + private final String engineid; private final Map containers = new ConcurrentHashMap<>(); @@ -32,6 +37,7 @@ public final class WebSocketEngine { protected WebSocketEngine(String engineid, Logger logger) { this.engineid = engineid; this.logger = logger; + this.index = sequence.getAndIncrement(); this.finest = logger.isLoggable(Level.FINEST); } @@ -44,10 +50,12 @@ public final class WebSocketEngine { t.setDaemon(true); return t; }); + long delay = (liveinterval - System.currentTimeMillis() / 1000 % liveinterval) + index * 5; scheduler.scheduleWithFixedDelay(() -> { getWebSocketGroups().stream().forEach(x -> x.sendEach(DEFAULT_PING_PACKET)); - }, (liveinterval - System.currentTimeMillis() / 1000 % liveinterval), liveinterval, TimeUnit.SECONDS); - if (finest) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(interval:" + liveinterval + "s) scheduler executor"); + if (finest) logger.finest(engineid + " ping..."); + }, delay, liveinterval, TimeUnit.SECONDS); + if (finest) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(delay:" + delay + ", interval:" + liveinterval + "s) scheduler executor"); } void add(WebSocket socket) {