最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Test if socket is still open - Stack Overflow

programmeradmin0浏览0评论

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.

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.

Share Improve this question edited May 23, 2017 at 11:50 CommunityBot 11 silver badge asked Mar 13, 2013 at 20:18 MrGlassMrGlass 9,26217 gold badges66 silver badges92 bronze badges 1
  • 2 you could try reducing the close timeout, see stackoverflow./questions/7192747/…, default is 60s. – Pascal Belloncle Commented Mar 13, 2013 at 20:31
Add a ment  | 

3 Answers 3

Reset to default 4

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 municate.
CLOSING 2: The connection is in theprocess of closing.
CLOSED 3: The connection is closed or couldn't be opened.

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

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

socket.on('disconnect', function() {
    users.splice(users.indexOf(socket), 1);
});
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!

发布评论

评论列表(0)

  1. 暂无评论