Skip to content

Commit a6c4238

Browse files
committed
[example] Close the WebSocket connection on logout
Fixes #1653
1 parent 2b7d84d commit a6c4238

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

examples/express-session-parse/index.js

+15-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const uuid = require('uuid');
88
const WebSocket = require('../..');
99

1010
const app = express();
11+
const map = new Map();
1112

1213
//
1314
// We need the same instance of the session parser in express and
@@ -37,8 +38,12 @@ app.post('/login', function(req, res) {
3738
});
3839

3940
app.delete('/logout', function(request, response) {
41+
const ws = map.get(request.session.userId);
42+
4043
console.log('Destroying session');
4144
request.session.destroy(function() {
45+
if (ws) ws.close();
46+
4247
response.send({ result: 'OK', message: 'Session destroyed' });
4348
});
4449
});
@@ -47,7 +52,7 @@ app.delete('/logout', function(request, response) {
4752
// Create HTTP server by ourselves.
4853
//
4954
const server = http.createServer(app);
50-
const wss = new WebSocket.Server({ noServer: true });
55+
const wss = new WebSocket.Server({ clientTracking: false, noServer: true });
5156

5257
server.on('upgrade', function(request, socket, head) {
5358
console.log('Parsing session from request...');
@@ -67,13 +72,19 @@ server.on('upgrade', function(request, socket, head) {
6772
});
6873

6974
wss.on('connection', function(ws, request) {
75+
const userId = request.session.userId;
76+
77+
map.set(userId, ws);
78+
7079
ws.on('message', function(message) {
7180
//
7281
// Here we can now use session parameters.
7382
//
74-
console.log(
75-
`Received message ${message} from user ${request.session.userId}`
76-
);
83+
console.log(`Received message ${message} from user ${userId}`);
84+
});
85+
86+
ws.on('close', function() {
87+
map.delete(userId);
7788
});
7889
});
7990

0 commit comments

Comments
 (0)