This commit is contained in:
@@ -32,6 +32,7 @@ import org.redkale.net.*;
|
|||||||
* 此模式下 以上方法都应该被重载。
|
* 此模式下 以上方法都应该被重载。
|
||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
|
*
|
||||||
* @see http://www.redkale.org
|
* @see http://www.redkale.org
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
@@ -88,7 +89,7 @@ public abstract class WebSocket {
|
|||||||
public final int send(WebSocketPacket packet) {
|
public final int send(WebSocketPacket packet) {
|
||||||
int rs = RETCODE_WSOCKET_CLOSED;
|
int rs = RETCODE_WSOCKET_CLOSED;
|
||||||
if (this._runner != null) rs = this._runner.sendMessage(packet);
|
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;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,6 +131,11 @@ public abstract class WebSocket {
|
|||||||
return send(data, true);
|
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) {
|
public final int sendPing(byte[] data) {
|
||||||
return send(new WebSocketPacket(FrameType.PING, 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) {
|
private int sendMessage(Serializable groupid, boolean recent, String text, boolean last) {
|
||||||
if (_engine.node == null) return RETCODE_NODESERVICE_NULL;
|
if (_engine.node == null) return RETCODE_NODESERVICE_NULL;
|
||||||
int rs = _engine.node.sendMessage(groupid, recent, text, last);
|
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;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int sendMessage(Serializable groupid, boolean recent, byte[] data, boolean last) {
|
private int sendMessage(Serializable groupid, boolean recent, byte[] data, boolean last) {
|
||||||
if (_engine.node == null) return RETCODE_NODESERVICE_NULL;
|
if (_engine.node == null) return RETCODE_NODESERVICE_NULL;
|
||||||
int rs = _engine.node.sendMessage(groupid, recent, data, last);
|
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;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取在线用户的节点地址列表
|
* 获取在线用户的节点地址列表
|
||||||
*
|
*
|
||||||
@@ -280,17 +286,17 @@ public abstract class WebSocket {
|
|||||||
protected final Collection<InetSocketAddress> getOnlineNodes(Serializable groupid) {
|
protected final Collection<InetSocketAddress> getOnlineNodes(Serializable groupid) {
|
||||||
return _engine.node.getOnlineNodes(groupid);
|
return _engine.node.getOnlineNodes(groupid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取在线用户的详细连接信息
|
* 获取在线用户的详细连接信息
|
||||||
*
|
*
|
||||||
* @param groupid
|
* @param groupid
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected final Map<InetSocketAddress, List<String>> getOnlineRemoteAddress(Serializable groupid) {
|
protected final Map<InetSocketAddress, List<String>> getOnlineRemoteAddress(Serializable groupid) {
|
||||||
return _engine.node.getOnlineRemoteAddress(groupid);
|
return _engine.node.getOnlineRemoteAddress(groupid);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前WebSocket下的属性
|
* 获取当前WebSocket下的属性
|
||||||
* <p>
|
* <p>
|
||||||
@@ -432,7 +438,7 @@ public abstract class WebSocket {
|
|||||||
|
|
||||||
public void onClose(int code, String reason) {
|
public void onClose(int code, String reason) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ws" + Objects.hashCode(this) + "@" + _remoteAddr;
|
return "ws" + Objects.hashCode(this) + "@" + _remoteAddr;
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.net.http;
|
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 static org.redkale.net.http.WebSocketServlet.DEFAILT_LIVEINTERVAL;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -56,8 +55,7 @@ public final class WebSocketEngine {
|
|||||||
});
|
});
|
||||||
long delay = (liveinterval - System.currentTimeMillis() / 1000 % liveinterval) + index * 5;
|
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.sendEachPing());
|
||||||
//if (finest) logger.finest(engineid + " ping...");
|
|
||||||
}, delay, liveinterval, TimeUnit.SECONDS);
|
}, delay, liveinterval, TimeUnit.SECONDS);
|
||||||
if (finest) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(delay:" + delay + ", interval:" + liveinterval + "s) scheduler executor");
|
if (finest) logger.finest(this.getClass().getSimpleName() + "(" + engineid + ")" + " start keeplive(delay:" + delay + ", interval:" + liveinterval + "s) scheduler executor");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -101,6 +101,14 @@ public final class WebSocketGroup {
|
|||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final int sendEachPing() {
|
||||||
|
int rs = 0;
|
||||||
|
for (WebSocket s : list) {
|
||||||
|
rs |= s.sendPing();
|
||||||
|
}
|
||||||
|
return rs;
|
||||||
|
}
|
||||||
|
|
||||||
public final int sendRecent(Serializable message) {
|
public final int sendRecent(Serializable message) {
|
||||||
return sendRecent(message, true);
|
return sendRecent(message, true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user