6

In the server end, I use Spring-websocket, Handshake as follow:

public class WebsocketEndPoint extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session,
            TextMessage message) throws Exception {
        System.out.println("start to translate data!");

        super.handleTextMessage(session, message);
        for (int i = 0; i <= 1000; i++) {
            session.sendMessage(new TextMessage("push message " + i));
            Thread.sleep(2000);
        }
        session.sendMessage(message);
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("Connection Established!");
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("Connection Closed!");
    }
}

springmvc.xml as follow:

<mvc:default-servlet-handler/>


<bean id="websocket" class="com.yyp.mvc.controller.WebsocketEndPoint" />
<websocket:handlers>
    <websocket:mapping path="/websocket" handler="websocket" />
    <websocket:handshake-interceptors>
        <bean class="com.yyp.mvc.controller.HandshakeInterceptor" />
    </websocket:handshake-interceptors>
</websocket:handlers>

In the client, my html as follow:

<!DOCTYPE html>

<html>
<head lang="en">
  <meta charset="UTF-8">
</head>
<body>
<button onclick="closeSocket()">stop socket</button>
<script>
  var  wsServer = 'ws://localhost:8080/websocket';
  var  websocket = new WebSocket(wsServer);
  websocket.onopen = function (evt) { onOpen(evt) };
  websocket.onclose = function (evt) { onClose(evt) };
  websocket.onmessage = function (evt) { onMessage(evt) };
  websocket.onerror = function (evt) { onError(evt) };
  function onOpen(evt) {
    console.log("Connected to WebSocket server.");
    websocket.send('hello');
  }
  function onClose(evt) {
    console.log("Disconnected");
  }
  function onMessage(evt) {
    console.log('Retrieved data from server: ' + evt.data);
  }
  function onError(evt) {
    console.log('Error occured: ' + evt.data);
  }
  function closeSocket (argument) {
    console.log("close socket");
    websocket.close();
    websocket=null;
  }
</script>

</body>
</html>

Finally, I could get log like this in the server:

before shakeHands
after shakeHands
Connection Established!
start to translate data!

Why couldn't get the "Connection Closed!" log after I click the "stop socket" button or how can I process the connection close information form the client?

Dom
  • 1,687
  • 6
  • 27
  • 37

0 Answers0