This commit is contained in:
地平线
2015-09-21 11:04:22 +08:00
parent ed69bdc11b
commit 0e965aebe7

View File

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