Socket.io: праверыць стан злучэння з гняздом ід

У мяне ёсць сокет ідэнтыфікатар злучэння. Ці магу я атрымаць статус гэтай сувязі, ўнутры функцыі апрацоўшчыка іншы?

Нешта накшталт гэтага:

io.sockets.on('connection', function(socket) {
    /* having the socket id of *another* connection, I can
     * check its status here.
     */
    io.sockets[other_socket_id].status
}

Ці ёсць спосаб зрабіць гэта?

5

8 адказы

Для версій вышэй 1.0, праверце Каран Капур адказ. Для больш старых версій, вы можаце атрымаць доступ да любой падлучаны сокет з io.sockets.sockets [a_socket_id] , так што калі вы ўсталюеце зменную стану на яго, io.sockets.sockets [a_socket_id] .status будзе працаваць.

Па-першае, вы павінны праверыць, калі сокет сапраўды існуе, і яна таксама можа быць выкарыстана для праверкі падлучаны/адключаны статусы.

if(io.sockets.sockets[a_socket_id]!=undefined){
  console.log(io.sockets.sockets[a_socket_id]); 
}else{
  console.log("Socket not connected");
}
13
дададзена
Гэта больш не працуе ..
дададзена аўтар Karan Kapoor, крыніца
Добры спосаб. Я знайшоў яшчэ адзін спосаб зрабіць гэта, і я дадам яго ў якасці адказу. Але я буду адзначаць вашы, як прынята;)
дададзена аўтар franzlorenzon, крыніца
Я мігравалі ў sockjs, але гэта, як я гэта зрабіў. Я ўзяў кліентаў io.sockets.clients() . Тады я ітэрацыя па масіве, пошук патрэбнага сокета (параўноўваючы ідэнтыфікатары, .id ўласцівасць на аб'екце сокета). Калі я знайшоў яго, я праверыў адключаны <�код /> ўласцівасці. Для большай дакладнасці, я напісаў простую сістэму праверкі актыўнасці, каб праверыць, калі кліенты былі жывыя.
дададзена аўтар franzlorenzon, крыніца
+1 за добры адказ, дзякуй!
дададзена аўтар Pankaj Khairnar, крыніца
@franzlorenzon: што іншы спосаб праверыць socketid ўсё яшчэ падключаны?
дададзена аўтар Pankaj Khairnar, крыніца

Для версій вышэй 1.0, праверце Каран Капур адказ. Для больш старых версій, вы можаце атрымаць доступ да любой падлучаны сокет з io.sockets.sockets [a_socket_id] , так што калі вы ўсталюеце зменную стану на яго, io.sockets.sockets [a_socket_id] .status будзе працаваць.

Па-першае, вы павінны праверыць, калі сокет сапраўды існуе, і яна таксама можа быць выкарыстана для праверкі падлучаны/адключаны статусы.

if(io.sockets.sockets[a_socket_id]!=undefined){
  console.log(io.sockets.sockets[a_socket_id]); 
}else{
  console.log("Socket not connected");
}
13
дададзена
Гэта больш не працуе ..
дададзена аўтар Karan Kapoor, крыніца
Добры спосаб. Я знайшоў яшчэ адзін спосаб зрабіць гэта, і я дадам яго ў якасці адказу. Але я буду адзначаць вашы, як прынята;)
дададзена аўтар franzlorenzon, крыніца
Я мігравалі ў sockjs, але гэта, як я гэта зрабіў. Я ўзяў кліентаў io.sockets.clients() . Тады я ітэрацыя па масіве, пошук патрэбнага сокета (параўноўваючы ідэнтыфікатары, .id ўласцівасць на аб'екце сокета). Калі я знайшоў яго, я праверыў адключаны <�код /> ўласцівасці. Для большай дакладнасці, я напісаў простую сістэму праверкі актыўнасці, каб праверыць, калі кліенты былі жывыя.
дададзена аўтар franzlorenzon, крыніца
+1 за добры адказ, дзякуй!
дададзена аўтар Pankaj Khairnar, крыніца
@franzlorenzon: што іншы спосаб праверыць socketid ўсё яшчэ падключаны?
дададзена аўтар Pankaj Khairnar, крыніца

Па стане на сённяшні дзень, люты, 2015, ні адзін з метадаў, пералічаных тут не працуюць на бягучай версіі Socket.io (1.1.0). Так што на гэтай версіі, гэта тое, як гэта працуе для мяне:

var socketList = io.sockets.server.eio.clients;
            if (socketList[user.socketid] === undefined){

клавішы io.sockets.server.eio.clients ўяўляе сабой масіў, які змяшчае спіс усіх жывых сокетаў ідэнтыфікатарамі. Так што выкарыстоўвайце код у заяве, калі праверыць, калі канкрэтны сокет ID ў гэтым спісе.

5
дададзена

Па стане на сённяшні дзень, люты, 2015, ні адзін з метадаў, пералічаных тут не працуюць на бягучай версіі Socket.io (1.1.0). Так што на гэтай версіі, гэта тое, як гэта працуе для мяне:

var socketList = io.sockets.server.eio.clients;
            if (socketList[user.socketid] === undefined){

клавішы io.sockets.server.eio.clients ўяўляе сабой масіў, які змяшчае спіс усіх жывых сокетаў ідэнтыфікатарамі. Так што выкарыстоўвайце код у заяве, калі праверыць, калі канкрэтны сокет ID ў гэтым спісе.

5
дададзена
if (io.sockets.connected[socketID]) { 
   //do what you want 
}
2
дададзена
як гэта дазволіць вам атрымаць статус злучэння? Гэта толькі здаецца, сачыць за Падключэнне статусу, няма іншых ...
дададзена аўтар Félix Gagnon-Grenier, крыніца

Socket.io >= 1.0, as Riwels answer, first you should check if the socket exists

if(io.sockets.connected[a_socket_id]!=undefined){
    console.log(io.sockets.connected[a_socket_id].connected); //or disconected property
}else{
    console.log("Socket not connected");
}
2
дададзена

Socket.io >= 1.0, as Riwels answer, first you should check if the socket exists

if(io.sockets.connected[a_socket_id]!=undefined){
    console.log(io.sockets.connected[a_socket_id].connected); //or disconected property
}else{
    console.log("Socket not connected");
}
2
дададзена

У больш новых версіях, вы можаце праверыць Socket.connected ўласцівасць.

var socket = io(myEndpoint)
console.log(socket.connected)//logs true or false

Таксама вы можаце ўсталяваць тайм-аўт

setTimeout(function() {
    if(! socket.connected) {
        throw new Error('some error')
    }
}, 5000)

Гэта правярае, калі сокет падлучаны праз 5 секунд.

0
дададзена