This commit is contained in:
@@ -81,7 +81,9 @@ public abstract class WebSocket {
|
|||||||
|
|
||||||
private final long createtime = System.currentTimeMillis();
|
private final long createtime = System.currentTimeMillis();
|
||||||
|
|
||||||
private Map<String, Object> attributes = new HashMap<>(); //非线程安全
|
private Map<String, Object> attributes = new HashMap<>(); //非线程安全
|
||||||
|
|
||||||
|
protected final long websocketid = System.nanoTime(); //唯一ID
|
||||||
|
|
||||||
protected WebSocket() {
|
protected WebSocket() {
|
||||||
}
|
}
|
||||||
@@ -363,28 +365,6 @@ public abstract class WebSocket {
|
|||||||
return rs;
|
return rs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定groupid在线用户的节点地址列表
|
|
||||||
*
|
|
||||||
* @param groupid groupid
|
|
||||||
*
|
|
||||||
* @return 地址列表
|
|
||||||
*/
|
|
||||||
protected final CompletableFuture<Collection<InetSocketAddress>> getOnlineNodes(Serializable groupid) {
|
|
||||||
return _engine.node.getOnlineNodes(groupid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取指定groupid在线用户的详细连接信息
|
|
||||||
*
|
|
||||||
* @param groupid groupid
|
|
||||||
*
|
|
||||||
* @return 地址集合
|
|
||||||
*/
|
|
||||||
protected final CompletableFuture<Map<InetSocketAddress, List<String>>> getOnlineRemoteAddress(Serializable groupid) {
|
|
||||||
return _engine.node.getOnlineRemoteAddress(groupid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前WebSocket下的属性,非线程安全
|
* 获取当前WebSocket下的属性,非线程安全
|
||||||
*
|
*
|
||||||
@@ -407,7 +387,7 @@ public abstract class WebSocket {
|
|||||||
* @return 属性值
|
* @return 属性值
|
||||||
*/
|
*/
|
||||||
public final <T> T removeAttribute(String name) {
|
public final <T> T removeAttribute(String name) {
|
||||||
return attributes == null ? null : (T) attributes.remove(name);
|
return attributes == null ? null : (T) attributes.remove(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -417,7 +397,7 @@ public abstract class WebSocket {
|
|||||||
* @param value 属性值
|
* @param value 属性值
|
||||||
*/
|
*/
|
||||||
public final void setAttribute(String name, Object value) {
|
public final void setAttribute(String name, Object value) {
|
||||||
if(attributes == null) attributes = new HashMap<>();
|
if (attributes == null) attributes = new HashMap<>();
|
||||||
attributes.put(name, value);
|
attributes.put(name, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ public abstract class WebSocketNode {
|
|||||||
protected WebSocketNode remoteNode;
|
protected WebSocketNode remoteNode;
|
||||||
|
|
||||||
//存放所有用户分布在节点上的队列信息,Set<InetSocketAddress> 为 sncpnode 的集合, key: groupid
|
//存放所有用户分布在节点上的队列信息,Set<InetSocketAddress> 为 sncpnode 的集合, key: groupid
|
||||||
|
//包含 localSncpAddress
|
||||||
//如果不是分布式(没有SNCP),sncpAddressNodes 将不会被用到
|
//如果不是分布式(没有SNCP),sncpAddressNodes 将不会被用到
|
||||||
@Resource(name = "$")
|
@Resource(name = "$")
|
||||||
protected CacheSource<Serializable, InetSocketAddress> sncpAddressNodes;
|
protected CacheSource<Serializable, InetSocketAddress> sncpAddressNodes;
|
||||||
@@ -96,18 +97,24 @@ public abstract class WebSocketNode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取在线用户的节点地址列表
|
* 获取用户在线的SNCP节点地址列表,不是分布式则返回空列表<br>
|
||||||
|
* InetSocketAddress 为 SNCP节点地址
|
||||||
*
|
*
|
||||||
* @param groupid groupid
|
* @param groupid groupid
|
||||||
*
|
*
|
||||||
* @return 地址列表
|
* @return 地址列表
|
||||||
*/
|
*/
|
||||||
public CompletableFuture<Collection<InetSocketAddress>> getOnlineNodes(final Serializable groupid) {
|
public CompletableFuture<Collection<InetSocketAddress>> getOnlineNodes(final Serializable groupid) {
|
||||||
return sncpAddressNodes == null ? CompletableFuture.completedFuture(null) : sncpAddressNodes.getCollectionAsync(groupid);
|
if (this.sncpAddressNodes != null) return this.sncpAddressNodes.getCollectionAsync(groupid);
|
||||||
|
List<InetSocketAddress> rs = new ArrayList<>();
|
||||||
|
if (this.localSncpAddress != null) rs.add(this.localSncpAddress);
|
||||||
|
return CompletableFuture.completedFuture(rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取在线用户的详细连接信息
|
* 获取在线用户的详细连接信息 <br>
|
||||||
|
* Map.key 为 SNCP节点地址
|
||||||
|
* Map.value 为 用户客户端的IP
|
||||||
*
|
*
|
||||||
* @param groupid groupid
|
* @param groupid groupid
|
||||||
*
|
*
|
||||||
@@ -116,7 +123,7 @@ public abstract class WebSocketNode {
|
|||||||
//异步待优化
|
//异步待优化
|
||||||
public CompletableFuture<Map<InetSocketAddress, List<String>>> getOnlineRemoteAddress(final Serializable groupid) {
|
public CompletableFuture<Map<InetSocketAddress, List<String>>> getOnlineRemoteAddress(final Serializable groupid) {
|
||||||
final CompletableFuture<Map<InetSocketAddress, List<String>>> rs = new CompletableFuture<>();
|
final CompletableFuture<Map<InetSocketAddress, List<String>>> rs = new CompletableFuture<>();
|
||||||
CompletableFuture< Collection<InetSocketAddress>> nodesFuture = getOnlineNodes(groupid);
|
CompletableFuture<Collection<InetSocketAddress>> nodesFuture = getOnlineNodes(groupid);
|
||||||
if (nodesFuture == null) return CompletableFuture.completedFuture(null);
|
if (nodesFuture == null) return CompletableFuture.completedFuture(null);
|
||||||
nodesFuture.whenComplete((nodes, e) -> {
|
nodesFuture.whenComplete((nodes, e) -> {
|
||||||
if (e != null) {
|
if (e != null) {
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ public class WebSocketRunner implements Runnable {
|
|||||||
this.webSocket = webSocket;
|
this.webSocket = webSocket;
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.wsbinary = wsbinary;
|
this.wsbinary = wsbinary;
|
||||||
webSocket._runner = this;
|
|
||||||
this.coder.logger = context.getLogger();
|
this.coder.logger = context.getLogger();
|
||||||
this.coder.debugable = false;//context.getLogger().isLoggable(Level.FINEST);
|
this.coder.debugable = false;//context.getLogger().isLoggable(Level.FINEST);
|
||||||
this.readBuffer = context.pollBuffer();
|
this.readBuffer = context.pollBuffer();
|
||||||
|
|||||||
@@ -144,7 +144,9 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
|
|||||||
}
|
}
|
||||||
webSocket._groupid = groupid;
|
webSocket._groupid = groupid;
|
||||||
WebSocketServlet.this.node.localEngine.add(webSocket);
|
WebSocketServlet.this.node.localEngine.add(webSocket);
|
||||||
context.runAsync(new WebSocketRunner(context, webSocket, response.removeChannel(), wsbinary));
|
WebSocketRunner runner = new WebSocketRunner(context, webSocket, response.removeChannel(), wsbinary);
|
||||||
|
webSocket._runner = runner;
|
||||||
|
context.runAsync(runner);
|
||||||
response.finish(true);
|
response.finish(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user