原因:翻译过来就是同一时刻有两个线程执行了同一个websockt发送信息时产生了冲突。作者在这是使用的线程,其实也包括其他方式执行websocket。
解决:解决方法很简单,就是在使用websocket发送消息的时候加上同步锁,即保证不会同时被执行。
代码如下:
public void sendJsonMsgToWeb(JSONObject json, String path){
for(WebSocketSession webSocketSession:MyWebSocketHander.webSocketList){
if(webSocketSession.getUri().getPath().equals(path)){
try {
synchronized (webSocketSession) {//加锁,保证不会同时被执行
webSocketSession.sendMessage(new TextMessage(json.toJSONString()));
}
} catch (IOException e){
System.out.println("ws send exception : " +e.toString());
}
}
}
}