Skip to content Skip to sidebar Skip to footer

How To Close A Websocket Like If Chrome Window Was Closing To Flush The Buffer To 0

when with portfowarding the websocket pass by internet and only send when the connexion is close (on my network it's like that), I first try to close the websocket by closing chro

Solution 1:

The terminate method you are trying to use is from a server implementation of WebSocket (not browser).

If you feel worried about the close method not actually closing the connection, you can verify it by yourself.

In your browser's console, type let socket = new WebSocket("wss://javascript.info/article/websocket/demo/hello");

Now in a Shell, type ping javascript.info which will give you the remote IPv6: 2606:4700:20::681a:c11.

Now type netstat -an -p tcpv6 which should display something like:

Shell

Finally, type socket.close(); in the browser's console and run netstat -an -p tcpv6 again, you'll notice that the previous row has disappeared.

Also, you'll notice that the row still shows in the browser's Network tab:

Network tab

So just don't rely on it when making assumptions on the socket's status.

Solution 2:

Short version: because WebSocket object doesn't have any terminate method.

The close method (which you are calling) is enough to close the websocket. Where did you read about terminate method?

Since in your question you are speaking about "hard close" and in you code you are doing this check ws.readyState == 2 I think you are looking for something to have ws.readyState == 3.

To have this is just matter of waiting a while after you called the close method.

The onclose property could help you; try adding following lines at the end of your script

ws.onclose = function(event) {
  console.log("Socket hard closed", ws.readyState);
}

Hope this helps.

Post a Comment for "How To Close A Websocket Like If Chrome Window Was Closing To Flush The Buffer To 0"