2016-11-06 6 views
0

私のJava websocketには、確立された直後に接続を終了したいと思います。Java websocket - すぐに接続を閉じる

サーバー

@ServerEndpoint(value = "/server") 
public class Server { 
private static final long serialVersionUID = 1L; 
private Session session; 

@OnOpen 
public void onOpen(Session session) throws IOException { 
    System.out.println("Server Websocket open"); 
    this.session = session; 
    try { 
     session.close(new CloseReason(CloseCodes.NORMAL_CLOSURE, "No Token")); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 


@OnMessage 
public void onMessage(String message) { 
    System.out.println("server receives: "+message); 
} 

@OnClose 
public void onClose(Session session) { 
    System.out.println("Server session closed"); 
    session = null; 
} 

クライアント

@ClientEndpoint 
public class Client { 

public static void main(String[] args) { 

    WebSocketContainer container = null; 

    container = ContainerProvider.getWebSocketContainer(); 
    try { 
     Session session = container.connectToServer(Client.class, URI.create("ws://localhost:8080/WebsocketServer/server")); 
    } catch (DeploymentException | IOException e) { 
     e.printStackTrace(); 
    } 

} 

@OnOpen 
public void onOpen(Session p) { 
    try { 
     for (int i = 0; i < 10; i++) { 
      p.getBasicRemote().sendText("Hello! "); 

      try { 
       Thread.sleep(500); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 

     } 
     p.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

@OnClose 
public void OnClose() { 
    System.out.println("Client connection closed"); 
} 

接続がサーバクラスで開く時の方法で閉鎖されているが、それはまだクライアントからメッセージを受け取ります。

server receives: Hello! 
server receives: Hello! 
server receives: Hello! 
server receives: Hello! 
... 

なぜcloseメソッドが呼び出されていますが、接続がまだ開いていてメッセージを受け取るのですか?

答えて

0

ws接続を正常に閉じることは非同期プロセスなので、サーバーからクローズ・メッセージが送信されますが、サーバーがクライアントからのクローズ・リプライを受信するまで接続はクローズされません。あなたの所見を踏まえて、クライアントがすでに10の「Hello!」を送信している可能性が非常に高いです。サーバーからのクローズ・メッセージの処理を開始する前のメッセージ。したがって、サーバーが関わっている限り、接続はまだ開いているので、「サーバーが受信しました」というメッセージが表示されます。

関連する問題