On 13/04/18 03:13, Funian Li wrote:
> 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 for the version information.

An upgrade to 9.0.x is unlikely to help. The code is almost identical
between 8.5.x and 9.0.x.

The next step will be to try the test case you provided to see if the
problem can be reproduced.

Mark

> 
>   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
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to