Describe the bug
- Everytime a certain amunt of data is sent by the client, the socket disconnects instantly.
- I am using [email protected]
- Client in browser (latest Chrome)
- Server on Node@16
Steps to reproduce
- Connect to server
- Let client send a packet that is at least
1e6 in size (code sample below)
- You will see it disconnect instantly.
Code Sample
Socket.IO server version: 4.1.2
Server
import { Server } from "socket.io";
const io = new Server(3000, {});
io.on("connection", (socket) => {
console.log(`connect ${socket.id}`);
socket.on("disconnect", () => {
console.log(`disconnected ${socket.id}`);
});
socket.on("noop", (data) => {
console.log(`noop received: ${data.length}`);
});
});
Socket.IO client version: 4.1.2
Client
import { io } from "socket.io-client";
const socket = io("ws://localhost:3000/", {});
socket.on("connect", () => {
console.log(`connect ${socket.id}`);
// NOTE: if you change N to 999000, it will NOT disconnect!
const N = 1e6;
const noopData = new Array(N).fill(1).join('');
socket.emit('noop', noopData);
console.warn(`noop sent, N=${N}`);
});
socket.on("disconnect", () => {
console.log("disconnect");
});
Expected behavior
Don't disconnect arbitrarily.
Platform:
Further Analysis
- I find the issue to also exist in
socket.io@3, but not in socket.io@2, which works just fine.
- I debugged the issue and found that
N=1e6 will disconnect, while N=999000 will NOT disconnect.
- That seems to indicate that whatever bug it is, it is largely tied to some sort of 1MB quota.
- When putting a breakpoint in the
onClose handler in ./node_modules/engine.io-client/lib/transports/websocket.js, you can debug the native WebSocket error event (which is in arguments[0]).
- It's code is
1005.
- According to MDN, code 1005 - "Indicates that no status code was provided even though one was expected."
Describe the bug
Steps to reproduce
1e6in size (code sample below)Code Sample
Socket.IO server version:
4.1.2Server
Socket.IO client version:
4.1.2Client
Expected behavior
Don't disconnect arbitrarily.
Platform:
Further Analysis
socket.io@3, but not insocket.io@2, which works just fine.N=1e6will disconnect, whileN=999000will NOT disconnect.onClosehandler in./node_modules/engine.io-client/lib/transports/websocket.js, you can debug the native WebSocket error event (which is inarguments[0]).1005.