Websocket broken with 2.1.0 and cluster / socket.io-redis
See original GitHub issueNote: for support questions, please use one of these channels: stackoverflow or slack
You want to:
- report a bug
- request a feature
Current behaviour
Just wanted to mention upgrading to 2.1.0 silently broke websocket on my setup.
It took some time to realize because it was properly falling back to polling only.
Reverting to 2.0.4 server (not client) resolves the problem for now
Steps to reproduce (if the current behaviour is a bug)
upgrade to socke.io to 2.1.0
Note: the best way to get a quick answer is to provide a failing test case, by forking the following fiddle for example.
update, the issue is apparently connected to the use of cluster, and ioredis adapter
repro:
const express = require('express');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const port = process.env.PORT || 3000;
const cluster = require('cluster');
const adapter = require('socket.io-redis');
if (cluster.isMaster) {
for (var i =0; i < 4; i++) {
cluster.fork();
}
} else {
app.use(express.static(__dirname + '/public'));
io.on('connect', onConnect);
server.listen(port, () => console.log('server listening on port ' + port));
io.adapter(adapter(redisServer));
function onConnect(socket){
console.log('connect ' + socket.id);
socket.on('disconnect', () => console.log('disconnect ' + socket.id));
}
}
Expected behaviour
working websockets
Setup
- OS:
- browser:
- socket.io version: 2.1.0
Other information (e.g. stacktraces, related issues, suggestions how to fix)
Server errors
DEBUG=socket.io* DEBUG=engine*
engine handshaking client "1jSK1mUZdTy7N0jXAAAA" +0ms
engine:socket sending packet "open" ({"sid":"1jSK1mUZdTy7N0jXAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +0ms
engine:socket flushing buffer to transport +13ms
engine:ws writing "0{"sid":"1jSK1mUZdTy7N0jXAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +0ms
engine:socket sending packet "message" (0) +16ms
engine:transport setting request +0ms
The server is running at http://localhost:8000/ (#43756)
engine:socket flushing buffer to transport +65ms
engine:ws writing "40" +80ms
engine:socket transport error +1ms
engine:ws closing +3ms
engine:socket error triggered by discarded transport +52ms
engine handshaking client "Nphvg46q6cw4bh_7AAAA" +0ms
engine:socket sending packet "open" ({"sid":"Nphvg46q6cw4bh_7AAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +0ms
engine:socket flushing buffer to transport +1ms
engine:ws writing "0{"sid":"Nphvg46q6cw4bh_7AAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +0ms
engine:socket sending packet "message" (0) +2ms
engine:transport setting request +0ms
engine:socket flushing buffer to transport +7ms
engine:ws writing "40" +8ms
engine:socket transport error +1ms
engine:ws closing +2ms
engine:socket error triggered by discarded transport +8ms
engine handshaking client "qYiMn4woVqVKvFmqAAAA" +0ms
engine:socket sending packet "open" ({"sid":"qYiMn4woVqVKvFmqAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +0ms
engine:socket flushing buffer to transport +1ms
engine:ws writing "0{"sid":"qYiMn4woVqVKvFmqAAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +0ms
engine:socket sending packet "message" (0) +4ms
engine:transport setting request +0ms
engine:socket flushing buffer to transport +7ms
engine:ws writing "40" +10ms
engine:socket transport error +3ms
engine:ws closing +3ms
engine:socket error triggered by discarded transport +18ms
engine handshaking client "FcW9mtO-3dnEvaA-AAAA" +0ms
engine:socket sending packet "open" ({"sid":"FcW9mtO-3dnEvaA-AAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +0ms
engine:socket flushing buffer to transport +3ms
engine:ws writing "0{"sid":"FcW9mtO-3dnEvaA-AAAA","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +0ms
engine:socket sending packet "message" (0) +27ms
engine:transport setting request +0ms
engine:socket flushing buffer to transport +14ms
engine:ws writing "40" +35ms
engine:socket transport error +3ms
engine:ws closing +5ms
engine:socket error triggered by discarded transport +19ms
engine handshaking client "16SrwNNmWl1o1sdyAAAB" +5s
engine:socket sending packet "open" ({"sid":"16SrwNNmWl1o1sdyAAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +5s
engine:socket flushing buffer to transport +0ms
engine:ws writing "0{"sid":"16SrwNNmWl1o1sdyAAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +5s
engine:socket sending packet "message" (0) +1ms
engine:transport setting request +5s
engine:socket flushing buffer to transport +3ms
engine:ws writing "40" +4ms
engine:socket transport error +1ms
engine:ws closing +1ms
engine:socket error triggered by discarded transport +6ms
engine handshaking client "eW6tDpTdGHrWPEXuAAAB" +3s
engine:socket sending packet "open" ({"sid":"eW6tDpTdGHrWPEXuAAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +3s
engine:socket flushing buffer to transport +0ms
engine:ws writing "0{"sid":"eW6tDpTdGHrWPEXuAAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +3s
engine:socket sending packet "message" (0) +0ms
engine:transport setting request +3s
engine:socket flushing buffer to transport +3ms
engine:ws writing "40" +3ms
engine:socket transport error +2ms
engine:ws closing +2ms
engine:socket error triggered by discarded transport +7ms
engine handshaking client "ruhv9xolYbNnqtEkAAAB" +2s
engine:socket sending packet "open" ({"sid":"ruhv9xolYbNnqtEkAAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +2s
engine:socket flushing buffer to transport +1ms
engine:ws writing "0{"sid":"ruhv9xolYbNnqtEkAAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +2s
engine:socket sending packet "message" (0) +0ms
engine:transport setting request +2s
engine:socket flushing buffer to transport +4ms
engine:ws writing "40" +4ms
engine:socket transport error +0ms
engine:ws closing +1ms
engine:socket error triggered by discarded transport +3ms
engine handshaking client "gawz_pvsNYywT8i0AAAB" +3s
engine:socket sending packet "open" ({"sid":"gawz_pvsNYywT8i0AAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}) +3s
engine:socket flushing buffer to transport +0ms
engine:ws writing "0{"sid":"gawz_pvsNYywT8i0AAAB","upgrades":[],"pingInterval":25000,"pingTimeout":5000}" +3s
engine:socket sending packet "message" (0) +1ms
engine:transport setting request +3s
engine:socket flushing buffer to transport +5ms
engine:ws writing "40" +6ms
engine:socket transport error +3ms
engine:ws closing +3ms
engine:socket error triggered by discarded transport +2ms
Client errors
on chrome
websocket.js:112 WebSocket connection to 'ws://localhost:8000/socket.io/?EIO=3&transport=websocket' failed: Invalid frame header
WS.doOpen @ websocket.js:112
Transport.open @ transport.js:80
Socket.open @ socket.js:245
Socket @ socket.js:119
Socket @ socket.js:28
Manager.open.Manager.connect @ manager.js:226
(anonymous) @ manager.js:540
Issue Analytics
- State:
- Created 5 years ago
- Reactions:2
- Comments:6 (1 by maintainers)
Top Results From Across the Web
WebSocket handshake in Node.JS, Socket.IO and Clusters ...
I using the socket.io-redis to share the information for all workers, but is not working. My code: var cluster = require('cluster'); ...
Read more >packages depending on socket.io-adapter - npm
IO cluster adapter, allowing to broadcast events between several Socket. ... Production WebSocket/Socket.io adapter for realtime features in your Sails app.
Read more >Troubleshooting connection issues | Socket.IO
Problem: the socket is not able to connect. Possible explanations: You are trying to reach a plain WebSocket server; The server is not ......
Read more >How to Build a Chat Application with Amazon ElastiCache for ...
In a multiserver architecture, a client makes a WebSocket connection to a load balancer that forwards traffic to a pool of servers.
Read more >WebSocket connection to 'wss://...' failed. ASP .Net Core Web ...
I believe the connection to make a CORS request is broken due to this WebSocket issue. Now our chat service (which is an...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
2.1.0 does not work for me either. only if i use example as is here. versions and everything. Following steps on site does not work. FYI.
@darrachequesne yes the example is an attempt to make a simplified version of our app, in the real life setup sticky sessions are handled, although this should not be a problem if the websocket connects.
Currently still using 2.0.4 for the moment, I’ll try to repro when I have more time