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

Reply via email to