2016-05-20 4 views
0

У меня есть клиент-серверное приложение, клиент основан на Java Desktop приложение и сервер веб-приложений с конечной точкой подвергается и развернутую кот - клиент/сервер.WebSockets - OnClose - падение интернет-соединение

@OnClose обрабатывает ниже сценарии. Могу ли я отправить сообщение на конечную точку сервера, когда дело доходит до @OnClose метода.

мне нужно обрабатывать ситуацию, когда подключение клиента закрывается из-за

1.) соединение падение Интернет

2.) Система переходит в режим гибернации.

У сервера могут быть открыты мои клиенты.

Вот мой код клиента

@ClientEndpoint 
public class ChatroomClientEndPoint { 
    Session session = null; 

    public ChatroomClientEndPoint() { 
     URI uri; 

     try { 

      uri = new URI("endpoint url"); 

      ContainerProvider.getWebSocketContainer().connectToServer(this, uri); 
      System.err.println("Connection found"); 
     } catch (Exception ex) { 
      System.err.println("No connection found-->" + ex); 
     } 

    } 


    @OnOpen 
    public void processOpen(Session session) throws MalformedURLException, IOException { 
     session.setMaxIdleTimeout(60000 * 60 * 24);  //websocket session timeout =1 day 
     this.session = session; 

    } 


    @OnMessage 
    public void processMessage(String message) throws JSONException { 
    // on receiving messages from server, sends desktop notifications 
    } 

    public void disConnect() throws IOException { 
     sendMessage("close"); 
    } 
} 

** Этот код уже разработан, и я думаю, что они не выполнили @OnClose, потому что они отправить сообщение близко к серверу, сервер удаляет эту сессию его список.

Может ли @OnClose помочь в случае вышеуказанных сбоев, подобных этим.

ответ

0

Я нашел решение/обходное решение для этого.

Как только ваше подключение к Интернету снижается, канал сокета остается нетронутым, и клиент больше не может отправлять сообщения.

Что я сделал, когда запрос пришел на конечную точку моего сервера, я спрашиваю клиента «если он подключен», тогда максимум я жду 3 секунды, чтобы получить ответ, не получив этого, это означает, что сокет не связанный.