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();
});
'developer tip' 카테고리의 다른 글
PHP : 예외와 오류? (0) | 2020.08.04 |
---|---|
프레임 워크 비 호환성 로깅 (0) | 2020.08.04 |
분산 워크 플로를위한 git의 "간단한"vs "현재"push.default (0) | 2020.08.04 |
PHP에서 self :: $ bar와 static :: $ bar의 차이점은 무엇입니까? (0) | 2020.08.04 |
2 차원 배열에 대한 포인터 만들기 (0) | 2020.08.04 |