Dear All, A problem happen when tomcat websocket server was used.
A sensor data chart with sampling freqency 50Hz is drawn. Tomcat websocket server( Version 8.5) is used to push the data with 20ms interval. The server code is as following: @ServerEndpoint("/websocketendpoint")public class WsServer {private Session session;private boolean keepingrunning;private static CopyOnWriteArraySet<WsServer> webSocketSet = new CopyOnWriteArraySet<WsServer>(); @OnClosepublic void onClose() { System.out.println("Close Connection ..."); keepingrunning = true; webSocketSet.remove(this);} @OnOpenpublic void onOpen(Session session) { System.out.println("Open Connection ..."); keepingrunning = true; this.session = session; webSocketSet.add(this); } @OnMessagepublic void onMessage(String message, Session session) { System.out.println("Message from the client: " + message); try { Random r = new Random(); // keep sending data while (keepingrunning) { int daf = r.nextInt(); this.session.getBasicRemote().sendText(Integer.toString(daf)); Thread.sleep(20); } } catch (Exception ex) { ex.printStackTrace(); } System.out.println("end"); } @OnErrorpublic void onError(Throwable e) { keepingrunning = true; e.printStackTrace();}} The client is as following: var ws=new WebSocket("ws://localhost:8080/WebSocketTest/websocketendpoint"); function start_webserver(){ ws.send("ac_1");} ws.onopen = function(evt) { console.log("Connection open ..."); }; ws.onmessage = function(evt) { console.log( "Received Message: " + evt.data); if(chart.series[0].data.length > 400) { chart.series[0].addPoint(parseFloat(evt.data), false, true, false); } else{ chart.series[0].addPoint(parseFloat(evt.data), false, false, false); }}; ws.onclose = function(evt) { console.log("Connection closed."); ws.close();}; ws.onerror = function (evt) { console.log("error: ", evt); }; function end_webserver(){ console.log("end the connection"); ws.close(); console.log("over");} // the button <button id="button" onclick="start_webserver()">Start</button> <button id="button" onclick="end_webserver()">stop</button> Questions: When start button clicked, the client can recieve the data to display the chart continously. But the stop button clicked , the onclose function both on client and server side did not call. It seem that onclose function is blocked by the onmessage function because the server keep sending data. Another websocket sever is tested and no problem happed. So is is the bug of tomcat socketserver ? Thanks. Regards, Skyspeed -