developer tip

socket.io 및 nodejs를 사용하여 서버에서 클라이언트 연결 끊기

optionbox 2020. 8. 4. 07:31
반응형

socket.io 및 nodejs를 사용하여 서버에서 클라이언트 연결 끊기


SocketIO를 사용하여 클라이언트를 연결 해제하고 문자 그대로 연결을 닫을 수있는 방법이 있습니까? 누군가 누군가 내 서버에 연결되어 있고 서버와의 연결을 끊고 싶다면 어떻게해야합니까?


편집 : 이제 가능합니다

이제 socket.disconnect()서버 측에서 간단히 전화 할 수 있습니다 .

내 원래 답변 :

아직 불가능합니다.

필요한 경우이 문제 에 대한 투표 / 의견을 작성 하십시오 .


socket.disconnect() 서버 측이 아닌 클라이언트 측에서만 사용할 수 있습니다.

Client.emit('disconnect')서버에서 연결 끊기 이벤트를 트리거하지만 클라이언트 연결을 효과적으로 끊지 않습니다. 클라이언트가 연결 해제를 인식하지 못합니다.

따라서 질문은 남아 있습니다 : 클라이언트가 서버 측에서 연결을 끊는 방법은 무엇입니까?


서버가 클라이언트에게 연결 끊기 기능을 호출하는 메시지를 보내지 못하게하는 이유는 무엇입니까?

클라이언트에서 :

socket.emit('forceDisconnect');

서버에서 :

socket.on('forceDisconnect', function(){
    socket.disconnect();
});

소켓의 이름이 지정된 소켓을 가정하면 다음을 사용하십시오.

socket.disconnect()

구글에서 이것을 발견 한 사람들을 위해-지금 이것에 대한 해결책이 있습니다 :

Socket.disconnect()클라이언트를 시작합니다 (서버 측). 클라이언트가 연결 상태를 유지할 기회가 없습니다. :)


내 경우에는 기본 연결을 해제하고 싶었습니다.이 경우 소스socket.disconnect(true) 에서 볼 수있는 것처럼 전화 해야 합니다.


오늘 아침 확인하면 다음과 같습니다.

socket.close()

https://socket.io/docs/client-api/#socket-close


client._onDisconnect() 작동해야합니다


Socket.io는 EventEmitter 패턴을 사용하여 하트 비트를 연결 해제 / 연결 / 확인합니다. Client.emit('disconnect');


이것은 나를 위해 작동하지 않았다 :

`socket.disconnect()` 

이것은 나를 위해 했다 :

socket.disconnect(true)

인계 true하면 클라이언트가 소켓 IO 문서에 연결된 네임 스페이스뿐만 아니라 클라이언트에 대한 기본 연결이 닫힙니다 .


사용 사례의 예 : 클라이언트가 유효하지 않은 액세스 토큰으로 웹 소켓 서버에 연결했습니다 (액세스 토큰이 연결 매개 변수가있는 웹 소켓 서버로 전달됨). 웹 소켓 서버는 유효하지 않은 액세스 토큰으로 인해 클라이언트에게 연결을 닫을 것이라고 알립니다.

// (1) the server code emits
socket.emit('invalidAccessToken', function(data) {
    console.log(data);       // (4) server receives 'invalidAccessTokenEmitReceived' from client
    socket.disconnect(true); // (5) force disconnect client 
});

// (2) the client code listens to event
// client.on('invalidAccessToken', (name, fn) => { 
//     // (3) the client ack emits to server
//     fn('invalidAccessTokenEmitReceived');
// });

연결을 끊은 후 모든 이벤트를 무시하기 위해 연결된 클라이언트에 client.emit('disconnect')+ client.removeAllListeners()사용 하고 있습니다.


나는 클라이언트 쪽에서 사용하고 있습니다 socket.disconnect();

client.emit('disconnect') didnt work for me

사용하다 :

socket.Disconnect () // 확인

사용하지 마세요 :

socket.disconnect ()


어레이에 새 소켓 연결을 추가 한 다음 모두 닫으려면 루프를 통해 연결을 끊고 연결을 끊으십시오. (서버 측)

var socketlist = [];

   io.sockets.on('connection', function (socket) {
        socketlist.push(socket);  
        //...other code for connection here..
   });


    //close remote sockets
    socketlist.forEach(function(socket) {        
        socket.disconnect();                      
    });    

참고URL : https://stackoverflow.com/questions/5048231/force-client-disconnect-from-server-with-socket-io-and-nodejs

반응형