作为一名软件开发人员,成为架构师是追求之一。系统架构师的能力不仅仅体现在书写业务代码上,更重要的是系统的结构和性能,是否具有可拓展性、高并发性和稳定性。
websocket如何发送数据?
/**
* 发送数据
* @param msg
* @throws IOException
*/
public void sendMsg(String msg) throws IOException{
try {
if(this.session.isOpen()){
this.session.getBasicRemote().sendText(msg);
}
} catch (IOException e) {
this.session.close();
}
}
直接调用当前session的方法,就可以发送数据了。
websocket如何配置?
在pom.xml文件里面导入websocket文件依赖包。
<!-- websocket -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
websocketPool连接池如何使用?
websocketPool连接池,可以把多个websocket对象放在已经封装好的连接池里面,这样可以方便的进行读取和调用连接池。
public static synchronized boolean addWebSocket(String key,WebSocket socket) {
Set<WebSocket> set = socketPool.get(key);
if (set == null) {
set = new HashSet<WebSocket>(0);
}
if(set.contains(socket)){
return true;
}
set.add(socket);
socketPool.put(key, (HashSet) set);
return true;
}
public static synchronized boolean removeWebSocket(String key,WebSocket socket) {
if (StringUtils.isNotBlank(key)) {
socketPool.remove(key);
} else if (socket != null) {
String socketId=socket.getId();
boolean breakFlag = false;
Set<String> keySet = socketPool.keySet();
for(Iterator<String> it=keySet.iterator();it.hasNext();){
String mapKey = it.next();
Set<WebSocket> webSocketSet = socketPool.get(mapKey);
for(WebSocket webSocket : webSocketSet){
if(webSocket.getId().equals(socketId)){
String id = socket.getId();
webSocketSet.remove(webSocket);
webSocket = null; //销毁对象
if(webSocketSet.size() == 0){
socketPool.remove(mapKey);
}
breakFlag= true;
break;
}
}
}
socket = null;//销毁对象
}
return true;
}
websoket重写方法?
//重写方法,是否含有对应的key信息
public static boolean containsKey(String key){
boolean breakFlag = false;
breakFlag = socketPool.containsKey(key);
return breakFlag;
}
因为private static ConcurrentHashMap<String, HashSet<WebSocket>> socketPool = new ConcurrentHashMap<String, HashSet<WebSocket>>(
0);就是一个静态的ConcurrentHashMap。
所以只要清楚这个,就可以重写方法了,开心,小小的纪念。还有调试websocket的时候,如果js报错,那么整个js页面就无法响应websocket。