express-ws
express-ws copied to clipboard
loss messages before setting a listener
It seems MySQL store wait for a little to get a session. It makes loss messages
Reproduction:
- use a session with MySQL store,
- store something to the session
- restart the server
- send a message from the client immediately on it opened
Result:
- Loss messages
source:
var express = require("express");
var expressWs = require("express-ws");
var session = require("express-session");
var ExpressMySQLSession = require("express-mysql-session");
var MySQLStore = ExpressMySQLSession(session);
var sessionStore = new MySQLStore({
host: 'localhost',
user: 'root',
database: 'express_session',
password: 'password'
});
var app = expressWs(express()).app;
app.use(session({
secret: 'secret',
saveUninitialized: false,
resave: false,
store: sessionStore
}));
app.get('/', function (req, res) {
// store something to the session
console.log(req.session.something);
req.session.something = 'something';
// this client will reconnect automatically
res.send("\n<script>\nfunction connect()\n{\n const ws = new WebSocket('ws://localhost:8000/api/ws');\n ws.onclose = ev=>{\n setTimeout(connect, 1000);\n };\n ws.onopen = ()=>{\n ws.send('data');\n };\n ws.onmessage = ev=>{\n console.log(ev.data);\n };\n}\nconnect();\n</script>\n");
});
app.ws('/api/ws', function (ws, req) {
console.log('data will received');
ws.on('message', function (data) {
console.log('data receivd:' + data);
});
});
app.listen(8000);