socket.on ('disconnect')이 클라이언트 측에서 즉시 시작되지만 서버 측에서 1 분이 소요됩니다.소켓 io js 연결 끊기 방출
시나리오 1 : 클라이언트가 인터넷 문제로 인해 연결이 끊어지면 서버 측 연결 끊기가 1 분 후에 서버 측에서 즉시 찾을 수 있습니다.
필자는 pingTimeout = 30000 및 pingInterval = 12000을 변경하려고 시도했지만 매 30 초마다 다시 연결하여 연결하려고했습니다.
socket.on ('disconnect')이 클라이언트 측에서 즉시 시작되지만 서버 측에서 1 분이 소요됩니다.소켓 io js 연결 끊기 방출
시나리오 1 : 클라이언트가 인터넷 문제로 인해 연결이 끊어지면 서버 측 연결 끊기가 1 분 후에 서버 측에서 즉시 찾을 수 있습니다.
필자는 pingTimeout = 30000 및 pingInterval = 12000을 변경하려고 시도했지만 매 30 초마다 다시 연결하여 연결하려고했습니다.
연결 해제 및 다시 연결을 쉽게하기 위해 시간 초과 지연과 소켓 연결 끊김 이벤트를 사용할 수 있습니다.
소켓이 연결되면 버킷 개체에 추가하십시오. 이것은 당신이 추적 할 수 있도록 소켓 ID를 저장하는 객체를 만들기 socketId
//object for delayed log out
let disconnection = {
sid : null, //socket id
delay : null //timeout id
};
의 핵심으로 (I 소켓에 닿는 노드 세션을 통해 추적) 플레이어의 ID를 추가
if (socket.request.sessionID && !bucket[socket.request.sessionID]) {
bucket[socket.request.session.player.id] = socket.id; //nuuu they stealin mah bukkit
}
사람 연결이 끊어졌습니다.
socket.on('disconnect', function() {
disconnection.sid = socket.request.sessionID; //grab session id
disconnection.delay = setTimeout(() => {
//set timeout to variable, in case of reconnection
delete bucket[socket.request.sessionID];
//emit the disconnection event
}, 60000);
});
사용자가 연결을 끊으면 다시 연결해야하는 시간 제한을 설정하십시오.
가 다시 연결되면, 단순히 수행
io.sockets.on("connection", socket => {
//check for disconnection, compare socket ids, and remove timeout if sockets match
if (disconnection.delay && disconnection.sid == socket.request.sessionID) {
clearTimeout(disconnection.delay);
disconnection.sid = null;
}
});
이 성공적으로 연결을 설정 한 번 더, 제한 시간을 기존 socketID의 재 연결을 확인하고 삭제합니다.
이 코드는 SourceUndead (내 게임)의 복사본이므로 일부는 직접 번역하지 않을 수도 있습니다 (예를 들어, 내 소켓 변수도 세션과 바인딩되어 있음). 단, 시간 초과 연결 끊김 개념 는 똑같은.
사용자가 연결할 때마다 socketID (clientIDs)를 저장하는 bucket.push()가 있다고 가정합니까? 우리 친구들이 혼란을 피할 수 있도록 그 맛있는 가벼운 이야기를 추가하는 것이 도움이 될 것입니다 ... – sova
예, 일종의 양동이는 그렇게 밀고 나가는 물건이 아닙니다. 미리보기에 추가하겠습니다. –
아, 고맙습니다. – sova