socketio / socket.io

Realtime application framework (Node.JS server)
https://socket.io
MIT License
61.19k stars 10.11k forks source link

Websocket Connection Becomes Unstable - Starts disconnecting and reconnecting after a while of being active #5124

Open yakirs57 opened 10 months ago

yakirs57 commented 10 months ago

Description I am using a Python based Websocket server version 5.4.1 and a React JS based Websocket client version 4.3.2. My application is connecting to 10 Websocket servers from 1 client. For some of my clients, after a random duration of time, the websocket connection starts to become unstable, disconnect and then reconnect nonstop.

To Reproduce It doesn't reproduce by doing a certain action. Even when there is a network disconnection we manage to reconnect without a problem and maintain a stable connection. But it still seems like in certain situations, when the network speed is slow, and it experienced a disconnection of some sort, this happens. Although it doesn't happen every time. I am struggling with solving it, and figuring out exactly when and why it happens.

Socket.IO server version: 5.4.1 Socket.IO client version: 4.3.2

Server

import flask
from flask_socketio import SocketIO

app = flask.Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins="*", ping_timeout=1200, ping_interval=1205, logger=False, engineio_logger=False)

Client

import {io} from "socket.io-client";

io( `${ep}/${namespace}`, { 'transports': ["websocket"], } )

Platform: Happens on both Android and IOS devices.

darrachequesne commented 10 months ago

Hi! What is the reason of the disconnection?

socket.on("connect_error", (err) => {
  console.log(err);
  console.log(err.context);
});

socket.on("disconnect", (reason, details) => {
  console.log(reason);
  console.log(details.context);
});

If you are using the Python implementation, did you open an issue in the repository ?

FabianHummel commented 10 months ago

I have a similar issue with a rust server implementation (socketioxide) and socket.io-client. I am getting the error "got plaintext data when reconstructing a packet" in the socket.io-parser library. This is especially often the case when sending two packets in the same exact moment as the Json-Binary packet-pairs are getting mixed up and result in an invalid position like Json-Json and Binary-Binary which causes the parser to throw.

yakirs57 commented 10 months ago

@darrachequesne I am still uncertain about the reason of the disconnection. I was not aware that it can be investigated in the manner you presented in your comment.

I am using Python in the BE and Javascript in the FE. The disconnection happens from the FE side and not the BE side.