From 0d0903f02d532d7d78bacecffabaeece055f3d24 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Wed, 30 Dec 2015 17:19:54 +0800 Subject: [PATCH] --- src/org/redkale/net/http/WebSocket.java | 24 ++++++++++++------- src/org/redkale/net/http/WebSocketEngine.java | 4 +--- src/org/redkale/net/http/WebSocketGroup.java | 8 +++++++ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/org/redkale/net/http/WebSocket.java b/src/org/redkale/net/http/WebSocket.java index 23761f07c..4d5cf3c7a 100644 --- a/src/org/redkale/net/http/WebSocket.java +++ b/src/org/redkale/net/http/WebSocket.java @@ -32,6 +32,7 @@ import org.redkale.net.*; * 此模式下 以上方法都应该被重载。 *

* + * * @see http://www.redkale.org * @author zhangjx */ @@ -88,7 +89,7 @@ public abstract class WebSocket { public final int send(WebSocketPacket packet) { int rs = RETCODE_WSOCKET_CLOSED; if (this._runner != null) rs = this._runner.sendMessage(packet); - if(_engine.finest) _engine.logger.finest("wsgroupid:" + getGroupid() + " send websocket result is " + rs + " on " + this + " by message(" + packet + ")"); + if (_engine.finest) _engine.logger.finest("wsgroupid:" + getGroupid() + " send websocket result is " + rs + " on " + this + " by message(" + packet + ")"); return rs; } @@ -130,6 +131,11 @@ public abstract class WebSocket { return send(data, true); } + public final int sendPing() { + //if (_engine.finest) _engine.logger.finest(this + " on "+_engine.getEngineid()+" ping..."); + return send(WebSocketPacket.DEFAULT_PING_PACKET); + } + public final int sendPing(byte[] data) { return send(new WebSocketPacket(FrameType.PING, data)); } @@ -260,17 +266,17 @@ public abstract class WebSocket { private int sendMessage(Serializable groupid, boolean recent, String text, boolean last) { if (_engine.node == null) return RETCODE_NODESERVICE_NULL; int rs = _engine.node.sendMessage(groupid, recent, text, last); - if(_engine.finest) _engine.logger.finest("wsgroupid:" + groupid + " "+(recent ? "recent " : "") + "send websocket result is " + rs + " on " + this + " by message(" + text + ")"); + if (_engine.finest) _engine.logger.finest("wsgroupid:" + groupid + " " + (recent ? "recent " : "") + "send websocket result is " + rs + " on " + this + " by message(" + text + ")"); return rs; } private int sendMessage(Serializable groupid, boolean recent, byte[] data, boolean last) { if (_engine.node == null) return RETCODE_NODESERVICE_NULL; int rs = _engine.node.sendMessage(groupid, recent, data, last); - if(_engine.finest) _engine.logger.finest("wsgroupid:" + groupid + " "+(recent ? "recent " : "") + "send websocket result is " + rs + " on " + this + " by message(byte[" + data.length + "])"); + if (_engine.finest) _engine.logger.finest("wsgroupid:" + groupid + " " + (recent ? "recent " : "") + "send websocket result is " + rs + " on " + this + " by message(byte[" + data.length + "])"); return rs; } - + /** * 获取在线用户的节点地址列表 * @@ -280,17 +286,17 @@ public abstract class WebSocket { protected final Collection getOnlineNodes(Serializable groupid) { return _engine.node.getOnlineNodes(groupid); } - + /** * 获取在线用户的详细连接信息 - * + * * @param groupid - * @return + * @return */ protected final Map> getOnlineRemoteAddress(Serializable groupid) { return _engine.node.getOnlineRemoteAddress(groupid); } - + /** * 获取当前WebSocket下的属性 *

@@ -432,7 +438,7 @@ public abstract class WebSocket { public void onClose(int code, String reason) { } - + @Override public String toString() { return "ws" + Objects.hashCode(this) + "@" + _remoteAddr; diff --git a/src/org/redkale/net/http/WebSocketEngine.java b/src/org/redkale/net/http/WebSocketEngine.java index 6d9bd9d2e..5bfe7c87f 100644 --- a/src/org/redkale/net/http/WebSocketEngine.java +++ b/src/org/redkale/net/http/WebSocketEngine.java @@ -5,7 +5,6 @@ */ package org.redkale.net.http; -import static org.redkale.net.http.WebSocketPacket.DEFAULT_PING_PACKET; import static org.redkale.net.http.WebSocketServlet.DEFAILT_LIVEINTERVAL; import java.io.*; import java.util.*; @@ -56,8 +55,7 @@ public final class WebSocketEngine { }); long delay = (liveinterval - System.currentTimeMillis() / 1000 % liveinterval) + index * 5; scheduler.scheduleWithFixedDelay(() -> { - getWebSocketGroups().stream().forEach(x -> x.sendEach(DEFAULT_PING_PACKET)); - //if (finest) logger.finest(engineid + " ping..."); + getWebSocketGroups().stream().forEach(x -> x.sendEachPing()); }, delay, liveinterval, TimeUnit.SECONDS); if (finest) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(delay:" + delay + ", interval:" + liveinterval + "s) scheduler executor"); } diff --git a/src/org/redkale/net/http/WebSocketGroup.java b/src/org/redkale/net/http/WebSocketGroup.java index 8d00ef97e..71a95f3eb 100644 --- a/src/org/redkale/net/http/WebSocketGroup.java +++ b/src/org/redkale/net/http/WebSocketGroup.java @@ -101,6 +101,14 @@ public final class WebSocketGroup { return rs; } + public final int sendEachPing() { + int rs = 0; + for (WebSocket s : list) { + rs |= s.sendPing(); + } + return rs; + } + public final int sendRecent(Serializable message) { return sendRecent(message, true); }