This commit is contained in:
@@ -67,6 +67,10 @@ public abstract class WebSocket {
|
|||||||
|
|
||||||
Serializable _groupid; //不可能为空
|
Serializable _groupid; //不可能为空
|
||||||
|
|
||||||
|
SocketAddress _remoteAddress;//不可能为空
|
||||||
|
|
||||||
|
String _remoteAddr;//不可能为空
|
||||||
|
|
||||||
private final long createtime = System.currentTimeMillis();
|
private final long createtime = System.currentTimeMillis();
|
||||||
|
|
||||||
private final Map<String, Object> attributes = new ConcurrentHashMap<>();
|
private final Map<String, Object> attributes = new ConcurrentHashMap<>();
|
||||||
@@ -261,10 +265,26 @@ public abstract class WebSocket {
|
|||||||
return _engine.node.sendMessage(groupid, recent, data, last);
|
return _engine.node.sendMessage(groupid, recent, data, last);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取在线用户的节点地址列表
|
||||||
|
*
|
||||||
|
* @param groupid
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
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
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected final Map<InetSocketAddress, List<String>> getOnlineRemoteAddress(Serializable groupid) {
|
||||||
|
return _engine.node.getOnlineRemoteAddress(groupid);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前WebSocket下的属性
|
* 获取当前WebSocket下的属性
|
||||||
* <p>
|
* <p>
|
||||||
@@ -316,6 +336,24 @@ public abstract class WebSocket {
|
|||||||
return _sessionid;
|
return _sessionid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取客户端直接地址, 当WebSocket连接是由代理服务器转发的,则该值固定为代理服务器的IP地址
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public final SocketAddress getRemoteAddress() {
|
||||||
|
return _remoteAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取客户端真实地址
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public final String getRemoteAddr() {
|
||||||
|
return _remoteAddr;
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------------------------
|
//-------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* 获取当前WebSocket所属的WebSocketGroup, 不会为null
|
* 获取当前WebSocket所属的WebSocketGroup, 不会为null
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public abstract class WebSocketNode {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
protected abstract List<String> getOnlineRemoteAddresses(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid);
|
||||||
|
|
||||||
protected abstract int sendMessage(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid, boolean recent, Serializable message, boolean last);
|
protected abstract int sendMessage(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid, boolean recent, Serializable message, boolean last);
|
||||||
|
|
||||||
@@ -63,15 +64,33 @@ public abstract class WebSocketNode {
|
|||||||
|
|
||||||
//--------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* 获取在线的节点地址列表
|
* 获取在线用户的节点地址列表
|
||||||
*
|
*
|
||||||
* @param groupid
|
* @param groupid
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public Collection<InetSocketAddress> getOnlineNodes(Serializable groupid) {
|
public Collection<InetSocketAddress> getOnlineNodes(final Serializable groupid) {
|
||||||
return source.getCollection(groupid);
|
return source.getCollection(groupid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取在线用户的详细连接信息
|
||||||
|
*
|
||||||
|
* @param groupid
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Map<InetSocketAddress, List<String>> getOnlineRemoteAddress(final Serializable groupid) {
|
||||||
|
Collection<InetSocketAddress> nodes = getOnlineNodes(groupid);
|
||||||
|
if(nodes == null) return null;
|
||||||
|
final Map<InetSocketAddress, List<String>> map = new HashMap();
|
||||||
|
for(InetSocketAddress nodeAddress : nodes) {
|
||||||
|
List<String> list = getOnlineRemoteAddresses(nodeAddress, groupid);
|
||||||
|
if(list == null) list = new ArrayList();
|
||||||
|
map.put(nodeAddress, list);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
public final void connect(Serializable groupid, String engineid) {
|
public final void connect(Serializable groupid, String engineid) {
|
||||||
if (finest) logger.finest(localSncpAddress + " receive websocket connect event (" + groupid + " on " + engineid + ").");
|
if (finest) logger.finest(localSncpAddress + " receive websocket connect event (" + groupid + " on " + engineid + ").");
|
||||||
Set<String> engineids = localNodes.get(groupid);
|
Set<String> engineids = localNodes.get(groupid);
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ public abstract class WebSocketServlet extends HttpServlet {
|
|||||||
}
|
}
|
||||||
final WebSocket webSocket = this.createWebSocket();
|
final WebSocket webSocket = this.createWebSocket();
|
||||||
webSocket._engine = engine;
|
webSocket._engine = engine;
|
||||||
|
webSocket._remoteAddress = request.getRemoteAddress();
|
||||||
|
webSocket._remoteAddr = request.getRemoteAddr();
|
||||||
Serializable sessionid = webSocket.onOpen(request);
|
Serializable sessionid = webSocket.onOpen(request);
|
||||||
if (sessionid == null) {
|
if (sessionid == null) {
|
||||||
if (debug) logger.finest("WebSocket connect abort, Not found sessionid. request=" + request);
|
if (debug) logger.finest("WebSocket connect abort, Not found sessionid. request=" + request);
|
||||||
|
|||||||
@@ -431,7 +431,7 @@ public class CacheSourceService<K extends Serializable, V extends Object> implem
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ConstructorProperties({"cacheType", "expireSeconds", "lastAccessed", "key", "value"})
|
@ConstructorProperties({"cacheType", "expireSeconds", "lastAccessed", "key", "value"})
|
||||||
protected CacheEntry(CacheEntryType cacheType, int expireSeconds, int lastAccessed, K key, T value) {
|
public CacheEntry(CacheEntryType cacheType, int expireSeconds, int lastAccessed, K key, T value) {
|
||||||
this.cacheType = cacheType;
|
this.cacheType = cacheType;
|
||||||
this.expireSeconds = expireSeconds;
|
this.expireSeconds = expireSeconds;
|
||||||
this.lastAccessed = lastAccessed;
|
this.lastAccessed = lastAccessed;
|
||||||
|
|||||||
@@ -30,6 +30,21 @@ public class WebSocketNodeService extends WebSocketNode implements Service {
|
|||||||
super.destroy(conf);
|
super.destroy(conf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getOnlineRemoteAddresses(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid) {
|
||||||
|
if (localSncpAddress != null && !localSncpAddress.equals(targetAddress)) return null;
|
||||||
|
final Set<String> engineids = localNodes.get(groupid);
|
||||||
|
if (engineids == null || engineids.isEmpty()) return null;
|
||||||
|
final List<String> rs = new ArrayList<>();
|
||||||
|
for (String engineid : engineids) {
|
||||||
|
final WebSocketEngine engine = engines.get(engineid);
|
||||||
|
if (engine == null) continue;
|
||||||
|
final WebSocketGroup group = engine.getWebSocketGroup(groupid);
|
||||||
|
group.getWebSockets().forEach(x -> rs.add(x.getRemoteAddr()));
|
||||||
|
}
|
||||||
|
return rs;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int sendMessage(@DynTargetAddress InetSocketAddress addr, Serializable groupid, boolean recent, Serializable message, boolean last) {
|
public int sendMessage(@DynTargetAddress InetSocketAddress addr, Serializable groupid, boolean recent, Serializable message, boolean last) {
|
||||||
final Set<String> engineids = localNodes.get(groupid);
|
final Set<String> engineids = localNodes.get(groupid);
|
||||||
|
|||||||
Reference in New Issue
Block a user