MrGlass
MrGlass

Reputation: 9252

Test if socket is still open

Following instruction from my previous question, I now have an array of connected users in socket.io. My problem (which I was warned of in the answer) is that sockets stay in this array even after the browser has disconnected.

I tried removing sockets from the array in a socket.on('disconnect' function, but there is still a delay of ~1 minute between when the browser disconnects and socket.io triggers the disconnect.

What is the best way to "test" a socket to see if its actually alive? I am tempted to try to send a message and catch any errors, but I feel like there is a more elegant solution.

Upvotes: 4

Views: 7922

Answers (3)

Olle89
Olle89

Reputation: 678

Solution on how to test if "socket is still open"

if(socket.readyState === socket.OPEN)
{
}

Why it works:

readyState = The current state of the connection; this is one of the Ready state constants. Read only.

"the Ready state constants"
CONNECTING 0: The connection is not yet open.
OPEN 1: The connection is open and ready to communicate.
CLOSING 2: The connection is in theprocess of closing.
CLOSED 3: The connection is closed or couldn't be opened.

https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

Upvotes: 4

spaceman12
spaceman12

Reputation: 1109

socket.on('end',function(){
//your code
})

or

socket.on('error',function(err){
//in case of any errors
})

The disconnect event wont fire until all the clients has been disconnected!

Upvotes: 0

MrGlass
MrGlass

Reputation: 9252

I had an error in my disconnect handler. What I ended up using:

socket.on('disconnect', function() {
    users.splice(users.indexOf(socket), 1);
});

Upvotes: 0

Related Questions