added socket timeout

This commit is contained in:
Steffen 2020-06-04 21:44:25 +02:00
parent 1863761a66
commit 087f504a83
No known key found for this signature in database
GPG Key ID: 764D74E98267DFC6
1 changed files with 24 additions and 3 deletions

View File

@ -7,17 +7,24 @@ const server = https.createServer({
key: fs.readFileSync("key.pem") key: fs.readFileSync("key.pem")
}); });
const wss = new WebSocket.Server({ const wss = new WebSocket.Server({
server, ...(process.env.NODE_ENV === "development" ? { port: 8081 } : { server }),
// port: 8081,
verifyClient: info => verifyClient: info =>
!!info.origin.match(/^https?:\/\/(bra1n\.github\.io|localhost)/i) !!info.origin.match(/^https?:\/\/(bra1n\.github\.io|localhost)/i)
}); });
function noop() {}
function heartbeat() {
this.isAlive = true;
}
wss.on("connection", function connection(ws, req) { wss.on("connection", function connection(ws, req) {
ws.channel = req.url ws.channel = req.url
.split("/") .split("/")
.pop() .pop()
.toLocaleLowerCase(); .toLocaleLowerCase();
ws.isAlive = true;
ws.on("pong", heartbeat);
ws.on("message", function incoming(data) { ws.on("message", function incoming(data) {
if (!data.match(/^\["ping/i)) { if (!data.match(/^\["ping/i)) {
console.log(ws.channel, wss.clients.size, data); console.log(ws.channel, wss.clients.size, data);
@ -34,4 +41,18 @@ wss.on("connection", function connection(ws, req) {
}); });
}); });
const interval = setInterval(function ping() {
wss.clients.forEach(function each(ws) {
if (ws.isAlive === false) return ws.terminate();
ws.isAlive = false;
ws.ping(noop);
});
}, 30000);
wss.on("close", function close() {
clearInterval(interval);
});
if (process.env.NODE_ENV !== "development") {
server.listen(8080); server.listen(8080);
}