Merge pull request #400 from thecodingmachine/fix/disconnect
FIX: the server now closes the socket after 30s of no pong
This commit is contained in:
commit
21d2e6aa69
@ -20,7 +20,7 @@ import {parse} from "query-string";
|
||||
import {jwtTokenManager} from "../Services/JWTTokenManager";
|
||||
import {adminApi, CharacterTexture, FetchMemberDataByUuidResponse} from "../Services/AdminApi";
|
||||
import {SocketManager, socketManager} from "../Services/SocketManager";
|
||||
import {emitInBatch, resetPing} from "../Services/IoSocketHelpers";
|
||||
import {emitInBatch, pongMaxInterval, refresLogoutTimerOnPong, resetPing} from "../Services/IoSocketHelpers";
|
||||
import {clientEventsEmitter} from "../Services/ClientEventsEmitter";
|
||||
import {ADMIN_API_TOKEN, ADMIN_API_URL} from "../Enum/EnvironmentVariable";
|
||||
|
||||
@ -240,6 +240,7 @@ export class IoSocketController {
|
||||
const client = this.initClient(ws); //todo: into the upgrade instead?
|
||||
socketManager.handleJoinRoom(client);
|
||||
resetPing(client);
|
||||
refresLogoutTimerOnPong(ws as ExSocketInterface);
|
||||
|
||||
//get data information and show messages
|
||||
if (ADMIN_API_URL) {
|
||||
@ -292,6 +293,9 @@ export class IoSocketController {
|
||||
drain: (ws) => {
|
||||
console.log('WebSocket backpressure: ' + ws.getBufferedAmount());
|
||||
},
|
||||
pong(ws) {
|
||||
refresLogoutTimerOnPong(ws as ExSocketInterface);
|
||||
},
|
||||
close: (ws, code, message) => {
|
||||
const Client = (ws as ExSocketInterface);
|
||||
try {
|
||||
|
@ -26,6 +26,7 @@ export interface ExSocketInterface extends WebSocket, Identificable {
|
||||
batchedMessages: BatchMessage;
|
||||
batchTimeout: NodeJS.Timeout|null;
|
||||
pingTimeout: NodeJS.Timeout|null;
|
||||
pongTimeout: NodeJS.Timeout|null;
|
||||
disconnecting: boolean,
|
||||
tags: string[],
|
||||
textures: CharacterTexture[],
|
||||
|
@ -47,4 +47,13 @@ export function emitError(Client: ExSocketInterface, message: string): void {
|
||||
Client.send(serverToClientMessage.serializeBinary().buffer, true);
|
||||
}
|
||||
console.warn(message);
|
||||
}
|
||||
}
|
||||
|
||||
export const pongMaxInterval = 30000; // the maximum duration (in ms) between pongs before we shutdown the connexion.
|
||||
|
||||
export function refresLogoutTimerOnPong(ws: ExSocketInterface): void {
|
||||
if(ws.pongTimeout) clearTimeout(ws.pongTimeout);
|
||||
ws.pongTimeout = setTimeout(() => {
|
||||
ws.close();
|
||||
}, pongMaxInterval);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user