enhance(backend): WebSocketのPing/Pongをプロトコル制御フレームの物で判別する

Resolve #10969
This commit is contained in:
syuilo 2023-06-09 17:07:57 +09:00
parent 308ab8f177
commit 6182a1cb2c

View file

@ -132,11 +132,8 @@ export class StreamingApiServerService {
if (userUpdateIntervalId) clearInterval(userUpdateIntervalId); if (userUpdateIntervalId) clearInterval(userUpdateIntervalId);
}); });
connection.on('message', async (data) => { connection.on('pong', () => {
this.#connections.set(connection, Date.now()); this.#connections.set(connection, Date.now());
if (data.toString() === 'ping') {
connection.send('pong');
}
}); });
}); });
@ -144,12 +141,14 @@ export class StreamingApiServerService {
this.#cleanConnectionsIntervalId = setInterval(() => { this.#cleanConnectionsIntervalId = setInterval(() => {
const now = Date.now(); const now = Date.now();
for (const [connection, lastActive] of this.#connections.entries()) { for (const [connection, lastActive] of this.#connections.entries()) {
if (now - lastActive > 1000 * 60 * 5) { if (now - lastActive > 1000 * 60 * 2) {
connection.terminate(); connection.terminate();
this.#connections.delete(connection); this.#connections.delete(connection);
} else {
connection.ping();
} }
} }
}, 1000 * 60 * 5); }, 1000 * 60);
} }
@bindThis @bindThis