2018-04-12 4:19 GMT+08:00 Mark Thomas <ma...@apache.org>: > On 11/04/18 09:50, Funian Li wrote: > > Dear All, > > > > A problem happen when tomcat websocket server was used. > > >Exact Tomcat version? > > >If not 8.5.30, does the problem still occur if you upgrade to 8.5.30? > > >Mark >
Yes , the exact Tomcat version is 8.5.30, shall i upgrade to tomcat 9.0 ? Thanks. Funian Li > > 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 > > > - > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org