arduinoWebSockets icon indicating copy to clipboard operation
arduinoWebSockets copied to clipboard

ESP32 SocketIO connects an disconnects repeatedly

Open ThibGiauffret opened this issue 5 years ago • 10 comments

Hi,

I'm currently working on a project in which I want to send some sensor data from ESP32 DEVKIT V1 to a nodejs app using SocketIO.

The app is launched on a distant server hosted by o2switch (cpanel and phusion passenger). SocketIO seems to work fine on this side, i can send/reveive information with a nodejs client/web client.

I tested the app on local network with port 3000 and everything worked like a charm (the ESP32 sends and receives data with the nodejs app). But when i try to connect to app hosted on the distant server, the ESP32 connects and disconnects regularely (every 10s I think) without sending data... However, i can see that the ESP32 connects to the app as i receive a connection message on the nodejs side.

I use WebSocketsClient/SocketIOclient v.2.3.0 on ESP32 because i'm still using [email protected] on server side.

Do you have an idea of what i am missing here ? Thank you for your help !

Here is the Arduino code :

// Wifi configuration
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
WiFiMulti WiFiMulti;
WiFiClient client;

// SocketIO configuration
#include <WebSocketsClient.h>
#include <SocketIOclient.h>
char host[] = "mywebsite.com"; // SocketIO Server Address
int port = 80; // SocketIO Port Address
SocketIOclient socketIO;

// Accelerometer data configuration
#include <ArduinoJson.h>
#include <Wire.h>
const int MPU=0x68; 
int16_t AcX,AcY,AcZ;
float ax,ay,az;
unsigned long previousMillis = 0;
unsigned long currentMillis;
unsigned long interval=1000; //interval for sending data to the websocket server in ms

void setup() {

    Serial.begin(115200);

    Serial.setDebugOutput(true);

    Serial.println();
    Serial.println();
    Serial.println();

    for(uint8_t t = 4; t > 0; t--) {
        Serial.printf("[SETUP] BOOT WAIT %d...\n", t);
        Serial.flush();
        delay(1000);
    }

    WiFiMulti.addAP("ssid", "pass");

    //WiFi.disconnect();
    while(WiFiMulti.run() != WL_CONNECTED) {
        delay(100);
    }

    String ip = WiFi.localIP().toString();
    Serial.printf("[SETUP] WiFi Connected %s\n", ip.c_str());

  
    // server address, port and URL
    socketIO.begin(host, port);

    // event handler
    socketIO.onEvent(socketIOEvent);


    // Wire start
    Wire.begin();
    Wire.beginTransmission(MPU);
    Wire.write(0x6B); 
    Wire.write(0);    
    Wire.endTransmission(true);

}

void loop() {

  socketIO.loop();

  // Wire get data
  Wire.beginTransmission(MPU);
  Wire.write(0x3B);  
  Wire.endTransmission(false);
  Wire.requestFrom(MPU,12,true);  
  AcX=Wire.read()<<8|Wire.read();    
  AcY=Wire.read()<<8|Wire.read();  
  AcZ=Wire.read()<<8|Wire.read();

  ax=AcX/16384.0*9.8;
  ay=AcY/16384.0*9.8;
  az=AcZ/16384.0*9.8;

  currentMillis=millis(); 
    
  
  // Send data each second  
  if (abs(currentMillis - previousMillis) >= interval) {
    previousMillis = currentMillis;
 

      // creat JSON message for Socket.IO (event)
        DynamicJsonDocument doc(1024);
        JsonArray array = doc.to<JsonArray>();
        
        // add evnet name
        // Hint: socket.on('event_name', ....
        array.add("arduino_measure");

        // add payload (parameters) for the event
        JsonObject param1 = array.createNestedObject();
        param1["ax"] = (String)ax;
        param1["ay"] = (String)ay;
        param1["az"] = (String)az;

        // JSON to String (serializion)
        String output;
        serializeJson(doc, output);

        // Send event        
        socketIO.sendEVENT(output);

        // Print JSON for debugging
        Serial.println(output);
        
  }
  
}

void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) {
  const uint8_t* src = (const uint8_t*) mem;
  Serial.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src, len, len);
  for(uint32_t i = 0; i < len; i++) {
    if(i % cols == 0) {
      Serial.printf("\n[0x%08X] 0x%08X: ", (ptrdiff_t)src, i);
    }
    Serial.printf("%02X ", *src);
    src++;
  }
  Serial.printf("\n");
}



void socketIOEvent(socketIOmessageType_t type, uint8_t * payload, size_t length) {
    switch(type) {
        case sIOtype_DISCONNECT:
            Serial.printf("[IOc] Disconnected!\n");
            break;
        case sIOtype_CONNECT:
            Serial.printf("[IOc] Connected to url: %s\n", payload);

            // join default namespace (no auto join in Socket.IO V3)
            socketIO.send(sIOtype_CONNECT, "/");
            break;
        case sIOtype_EVENT:
            Serial.printf("[IOc] get event: %s\n", payload);
            break;
        case sIOtype_ACK:
            Serial.printf("[IOc] get ack: %u\n", length);
            hexdump(payload, length);
            break;
        case sIOtype_ERROR:
            Serial.printf("[IOc] get error: %u\n", length);
            hexdump(payload, length);
            break;
        case sIOtype_BINARY_EVENT:
            Serial.printf("[IOc] get binary: %u\n", length);
            hexdump(payload, length);
            break;
        case sIOtype_BINARY_ACK:
            Serial.printf("[IOc] get binary ack: %u\n", length);
            hexdump(payload, length);
            break;
    }
}

and the nodejs server code :

var bodyParser = require("body-parser");
const express = require('express'); //express framework to have a higher level of methods
const app = express(); //assign app variable the express class/method
var http = require('http');
var path = require("path");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
const server = http.createServer(app);//create a server
var io = require('socket.io').listen(server);
port=80
server.listen(port);

app.use('/', express.static(path.join('public')));

app.get('/', function (req, res) {
  res.sendFile(path.join('public','index.html'));
});

io.sockets.on('connection', function (socket) {

  console.log(`[server][info] Socket ${socket.id} connected.`);

  socket.on('disconnect', () => {
    console.log(`[server][info] Socket ${socket.id} disconnected.`);
  });

  socket.on('arduino_measure', function(data) {
      message = JSON.stringify(data);
      var time = Math.round(new Date().getTime() / 1000);
      var newmessage = message.replace('{','{"date_mesure":'+time+',');
      console.log(newmessage);
      io.emit('measure', newmessage);
  });
})

ThibGiauffret avatar Dec 03 '20 10:12 ThibGiauffret

please enable the debug output to see the HTTP headers and messages. this will help to get to the problem.

Links2004 avatar Dec 04 '20 15:12 Links2004

Thank you for your answer ! Here is the debug info :

[SETUP] BOOT WAIT 3...
[SETUP] BOOT WAIT 2...
[SETUP] BOOT WAIT 1...
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 0 - WIFI_READY
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 2 - STA_START
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 4 - STA_CONNECTED
[D][WiFiGeneric.cpp:337] _eventCallback(): Event: 7 - STA_GOT_IP
[D][WiFiGeneric.cpp:381] _eventCallback(): STA IP: 192.168.43.164, MASK: 255.255.255.0, GW: 192.168.43.1
[SETUP] WiFi Connected 192.168.43.164
[E][esp32-hal-i2c.c:318] i2cDumpI2c(): i2c=0x3ffbecec
[I][esp32-hal-i2c.c:319] i2cDumpI2c(): dev=0x60013000 date=0x16042000
[I][esp32-hal-i2c.c:321] i2cDumpI2c(): lock=0x3ffba7c8
[I][esp32-hal-i2c.c:323] i2cDumpI2c(): num=0
[I][esp32-hal-i2c.c:324] i2cDumpI2c(): mode=1
[I][esp32-hal-i2c.c:325] i2cDumpI2c(): stage=3
[I][esp32-hal-i2c.c:326] i2cDumpI2c(): error=5
[I][esp32-hal-i2c.c:327] i2cDumpI2c(): event=0x3ffba84c bits=112
[I][esp32-hal-i2c.c:328] i2cDumpI2c(): intr_handle=0x3ffba87c
[I][esp32-hal-i2c.c:329] i2cDumpI2c(): dq=0x3ffba828
[I][esp32-hal-i2c.c:330] i2cDumpI2c(): queueCount=1
[I][esp32-hal-i2c.c:331] i2cDumpI2c(): queuePos=0
[I][esp32-hal-i2c.c:332] i2cDumpI2c(): errorByteCnt=-1
[I][esp32-hal-i2c.c:333] i2cDumpI2c(): errorQueue=0
[I][esp32-hal-i2c.c:334] i2cDumpI2c(): debugFlags=0x00000000
[I][esp32-hal-i2c.c:311] i2cDumpDqData(): Debug Buffer not Enabled
[I][esp32-hal-i2c.c:354] i2cDumpInts(): Debug Buffer not Enabled
[WS-Client] connect ws...
[WS-Client] connected to mywebsite.com:80.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1
Host: mywebsite.com:80
Connection: keep-alive
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 160 t: 4656
[WS-Client][sendHeader] sending header... Done (16957us).
[I][esp32-hal-i2c.c:1130] i2cProcQueue(): Bus busy, reinit
[write] n: 6 t: 4671
[write] n: 2 t: 4672
[write] n: 58 t: 4674
["arduino_measure",{"ax":"-0.13","ay":"0.08","az":"9.78"}]
[WS-Client][handleHeader] RX: HTTP/1.1 200 OK
[WS-Client][handleHeader] RX: Date: Fri, 04 Dec 2020 17:12:44 GMT
[WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
[WS-Client][handleHeader] RX: Content-Length: 103
[WS-Client][handleHeader] RX: Connection: keep-alive
[WS-Client][handleHeader] RX: Vary: Accept-Encoding
[WS-Client][handleHeader] RX: Access-Control-Allow-Credentials: true
[WS-Client][handleHeader] RX: Access-Control-Allow-Origin: file://
[WS-Client][handleHeader] RX: X-Powered-By: Phusion Passenger 5.3.7
[WS-Client][handleHeader] RX: Set-Cookie: io=IwcziaQF51DJ2LmJAAAG; Path=/; HttpOnly; SameSite=Strict
[WS-Client][handleHeader] RX: Status: 200 OK
[WS-Client][handleHeader] RX: Server: o2switch-PowerBoost-v3
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: iNgseoe5JzELZrmHKSlTTA==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 200
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: IwcziaQF51DJ2LmJAAAG
[WS-Client][handleHeader] still data in buffer (419), clean up.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=websocket&sid=IwcziaQF51DJ2LmJAAAG HTTP/1.1
Host: mywebsite.com:80
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: ztYg+ileNGaKjJyejiMcFQ==
Sec-WebSocket-Protocol: arduino
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 309 t: 4854
[D][WiFiClient.cpp:509] connected(): Disconnected: RES: 0, ERR: 128
[WS-Client] connection lost.
[WS-Client] client disconnected.
[IOc] Disconnected!
[wsIOc] Disconnected!
[WS-Client] connect ws...
[WS-Client] connected to mywebsite.com:80.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1
Host: mywebsite.com:80
Connection: keep-alive
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 160 t: 4964
[WS-Client][sendHeader] sending header... Done (16754us).
[WS-Client][handleHeader] RX: HTTP/1.1 200 OK
[WS-Client][handleHeader] RX: Date: Fri, 04 Dec 2020 17:12:44 GMT
[WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
[WS-Client][handleHeader] RX: Content-Length: 103
[WS-Client][handleHeader] RX: Connection: keep-alive
[WS-Client][handleHeader] RX: Vary: Accept-Encoding
[WS-Client][handleHeader] RX: Access-Control-Allow-Credentials: true
[WS-Client][handleHeader] RX: Access-Control-Allow-Origin: file://
[WS-Client][handleHeader] RX: X-Powered-By: Phusion Passenger 5.3.7
[WS-Client][handleHeader] RX: Set-Cookie: io=Kj0sMQxbIV03EWDqAAAH; Path=/; HttpOnly; SameSite=Strict
[WS-Client][handleHeader] RX: Status: 200 OK
[WS-Client][handleHeader] RX: Server: o2switch-PowerBoost-v3
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: cKinUhJgRHSO4Upsw1mGmg==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 200
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 0
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: Kj0sMQxbIV03EWDqAAAH
[WS-Client][handleHeader] still data in buffer (103), clean up.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=websocket&sid=Kj0sMQxbIV03EWDqAAAH HTTP/1.1
Host: mywebsite.com:80
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: kVTlTq1UKXtJQkEYaZieVQ==
Sec-WebSocket-Protocol: arduino
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 309 t: 5199
[WS-Client][sendHeader] sending header... Done (33687us).
[WS-Client][handleHeader] RX: HTTP/1.1 101 Switching Protocols
[WS-Client][handleHeader] RX: Date: Fri, 04 Dec 2020 17:12:44 GMT
[WS-Client][handleHeader] RX: Connection: upgrade
[WS-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino
[WS-Client][handleHeader] RX: Upgrade: websocket
[WS-Client][handleHeader] RX: Sec-WebSocket-Accept: yAWoA3eAu/pssSUnh3p0BxcBtEQ=
[WS-Client][handleHeader] RX: X-Powered-By: Phusion Passenger 5.3.7
[WS-Client][handleHeader] RX: Status: 101 Switching Protocols
[WS-Client][handleHeader] RX: Server: o2switch-PowerBoost-v3
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: kVTlTq1UKXtJQkEYaZieVQ==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 101
[WS-Client][handleHeader]  - cIsUpgrade: 1
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: yAWoA3eAu/pssSUnh3p0BxcBtEQ=
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: Kj0sMQxbIV03EWDqAAAH
[WS-Client][handleHeader] Websocket connection init done.
[WS][0][headerDone] Header Handling Done.
[wsIOc] Connected to url: /socket.io/?EIO=3
[WS][0][sendFrame] ------- send message frame -------
[WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 1 headerToPayload: 1
[WS][0][sendFrame] text: 5
[write] n: 7 t: 5583
[WS][0][sendFrame] sending Frame Done (5542us).
[IOc] Connected to url: /socket.io/?EIO=3
[write] n: 6 t: 5593
[write] n: 2 t: 5596
[write] n: 1 t: 5598
[write] n: 6 t: 5673
[write] n: 2 t: 5675
[write] n: 58 t: 5676
["arduino_measure",{"ax":"-0.20","ay":"0.05","az":"9.84"}]
[write] n: 6 t: 6673
[write] n: 2 t: 6677
[write] n: 58 t: 6678
["arduino_measure",{"ax":"-0.18","ay":"0.09","az":"9.94"}]
[write] n: 6 t: 7673
[write] n: 2 t: 7677
[write] n: 58 t: 7679
["arduino_measure",{"ax":"-0.17","ay":"0.09","az":"9.97"}]
[write] n: 6 t: 8674
[write] n: 2 t: 8678
[write] n: 58 t: 8680
["arduino_measure",{"ax":"-0.13","ay":"0.11","az":"9.87"}]
[write] n: 6 t: 9675
[write] n: 2 t: 9679
[write] n: 58 t: 9681
["arduino_measure",{"ax":"-0.14","ay":"0.05","az":"9.88"}]
[write] n: 6 t: 10676
[write] n: 2 t: 10680
[write] n: 58 t: 10682
["arduino_measure",{"ax":"-0.08","ay":"0.05","az":"9.86"}]
[write] n: 6 t: 11677
[write] n: 2 t: 11681
[write] n: 58 t: 11683
["arduino_measure",{"ax":"-0.16","ay":"0.05","az":"9.86"}]
[write] n: 6 t: 12678
[write] n: 2 t: 12682
[write] n: 58 t: 12684
["arduino_measure",{"ax":"-0.23","ay":"0.06","az":"9.83"}]
[write] n: 6 t: 13677
[write] n: 2 t: 13681
[write] n: 58 t: 13683
["arduino_measure",{"ax":"-0.17","ay":"0.10","az":"9.88"}]
[write] n: 6 t: 14678
[write] n: 2 t: 14682
[write] n: 58 t: 14684
["arduino_measure",{"ax":"-0.17","ay":"0.11","az":"9.85"}]
[WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
[readCb] n: 2 t: 15290
[WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
[WS][0][handleWebsocket] ------- read massage frame -------
[WS][0][handleWebsocket] fin: 0 rsv1: 0 rsv2: 1 rsv3 1  opCode: 2
[WS][0][handleWebsocket] mask: 0 payloadLen: 13
[readCb] n: 13 t: 15306
[readCb] receive TIMEOUT! 5001
[WS][0][handleWebsocket] missing data!
[WS][0][handleWebsocket] clientDisconnect code: 1002
[WS][0][sendFrame] ------- send message frame -------
[WS][0][sendFrame] fin: 1 opCode: 8 mask: 1 length: 2 headerToPayload: 0
[WS][0][sendFrame] pack to one TCP package...
[write] n: 8 t: 20324
[WS][0][sendFrame] sending Frame Done (5615us).
[WS-Client] client disconnected.
[IOc] Disconnected!
[wsIOc] Disconnected!

ThibGiauffret avatar Dec 04 '20 17:12 ThibGiauffret

for some time you had a working connection.

and at some point your server needed more then 5001ms to answer (5 sec), as result the lib declares the connection dead.

[WS][0][handleWebsocket] ------- read massage frame -------
[WS][0][handleWebsocket] fin: 0 rsv1: 0 rsv2: 1 rsv3 1  opCode: 2
[WS][0][handleWebsocket] mask: 0 payloadLen: 13
[readCb] n: 13 t: 15306
[readCb] receive TIMEOUT! 5001
[WS][0][handleWebsocket] missing data!
[WS][0][handleWebsocket] clientDisconnect code: 1002

is you wifi / connection to the server stable? does your server log show anything? may a server side timeout? between init of the connection and the last message we have around 10sec, is ist always this timing?

you can try to play with the timeout https://github.com/Links2004/arduinoWebSockets/blob/master/src/WebSockets.h#L95 but not getting a messages for 5 sec is quite long.

my best bet is a server side config followed by network issues.

looks like your hoster has a proxy before you nodejs code.

RX: Server: o2switch-PowerBoost-v3

side note: v2.3.1 of the lib can handle socket.IO v2 and socket.IO v3 protocol ;) so no need to keep the old version.

Links2004 avatar Dec 04 '20 18:12 Links2004

I have a very similar issue as @ThibGiauffret, socket.io connection from ESP32 works fine on my test server but when I deploy to a proper deployment server I am having connection issues... I can see from the debug it looks similar to the previous issue and appears to be going through a proxy, the same kind of Phusion Passenger 5.3.7 web server. When I connect with a web socket.io client things seem to get resolved and it pass through fine but with the ESP32 and socket.io client library it seems to get stuck and has timeout while waiting for a header response.

Any ideas how I can work around this?

Here is a debug output:

WS-Client] Websocket Version: 2.3.2
[WS-Client] connect ws...
[WS-Client] connected to the-website.com:80.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1
Host: the-website.com:80
Connection: keep-alive
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 164 t: 2884
[WS-Client][sendHeader] sending header... Done (24565us).
[WS-Client][handleHeader] RX: HTTP/1.1 200 OK
[WS-Client][handleHeader] RX: Date: Sat, 30 Jan 2021 07:45:05 GMT
[WS-Client][handleHeader] RX: Server: Apache
[WS-Client][handleHeader] RX: Access-Control-Allow-Origin: *
[WS-Client][handleHeader] RX: X-Powered-By: Phusion Passenger 5.3.7
[WS-Client][handleHeader] RX: Strict-Transport-Security: max-age=63072000; includeSubDomains
[WS-Client][handleHeader] RX: X-Frame-Options: SAMEORIGIN
[WS-Client][handleHeader] RX: X-Content-Type-Options: nosniff
[WS-Client][handleHeader] RX: Content-Length: 96
[WS-Client][handleHeader] RX: Status: 200 OK
[WS-Client][handleHeader] RX: Keep-Alive: timeout=3, max=500
[WS-Client][handleHeader] RX: Connection: Keep-Alive
[WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: W6H8mTOR6bC8WpiHeyaFBQ==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 200
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: 
[WS-Client][handleHeader] still missing cSessionId try socket.io V3
[WS-Client][handleHeader] socket.io json: 0{"sid":"-MvIsjzndgJX2NysAAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}
[WS-Client][handleHeader]  - cSessionId: -MvIsjzndgJX2NysAAAC
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: W6H8mTOR6bC8WpiHeyaFBQ==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 200
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: -MvIsjzndgJX2NysAAAC
[WS-Client][handleHeader] found cSessionId
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=websocket&sid=-MvIsjzndgJX2NysAAAC HTTP/1.1
Host: the-website.com:80
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: x1foEY+H3910oO2XshFb4A==
Sec-WebSocket-Protocol: arduino
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 313 t: 3296
[WS-Client][sendHeader] sending header... Done (38325us).
[WS-Client][handleHeader] RX: HTTP/1.1 101 Switching Protocols
[WS-Client][handleHeader] RX: Date: Sat, 30 Jan 2021 07:45:05 GMT
[WS-Client][handleHeader] RX: Server: Apache
[WS-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino
[WS-Client][handleHeader] RX: Upgrade: websocket
[WS-Client][handleHeader] RX: Sec-WebSocket-Accept: JUU8U1OVAjiXirzRO6FwGFxFPcE=
[WS-Client][handleHeader] RX: X-Powered-By: Phusion Passenger 5.3.7
[WS-Client][handleHeader] RX: Strict-Transport-Security: max-age=63072000; includeSubDomains
[WS-Client][handleHeader] RX: X-Frame-Options: SAMEORIGIN
[WS-Client][handleHeader] RX: X-Content-Type-Options: nosniff
[WS-Client][handleHeader] RX: Status: 101 Switching Protocols
[WS-Client][handleHeader] RX: Transfer-Encoding: chunked
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: x1foEY+H3910oO2XshFb4A==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 101
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: JUU8U1OVAjiXirzRO6FwGFxFPcE=
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: -MvIsjzndgJX2NysAAAC
[WS-Client][handleHeader] found cSessionId
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=websocket&sid=-MvIsjzndgJX2NysAAAC HTTP/1.1
Host: the-website.com:80
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: YxNFSmfbY6SL72BrLT5BLA==
Sec-WebSocket-Protocol: arduino
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 313 t: 3686
[WS-Client][sendHeader] sending header... Done (38324us).
[WS-Client][handleClientData] header response timeout.. disconnecting!
[WS-Client] client disconnected.
[wsIOc] Disconnected!
[wsIOc] Disconnected!

circuitsforfun avatar Jan 30 '21 09:01 circuitsforfun

After some more testing and investigation it seems to be a server error with the pass-through from Phusion Passenger to my Node app when performing the upgrade request... the web browser client is also seeing an error: failed: Error during WebSocket handshake: 'Connection' header is missing but seems to be ok ignoring the error and still maintains connection and I can see communication messages between the web browser client and the server but on the ESP32 when the header is missing it does a timeout and disconnects.

Is there a way to easily change some code or set a settings that can do a similar behavior and ignore that error? I know it's not ideal but I'm just looking for a quick workaround until I can get the hosting provider to fix the issue.

circuitsforfun avatar Jan 30 '21 23:01 circuitsforfun

I've tried several other hosting sites and no luck either..... web browser socket.io client always works but ESP32 and this library doesn't like these hosting sites (too many layers in front of the node server I guess?). I've tried going back to older versions of the javascript socket.io library on the server an no luck either, I've tried everything from Engine.IO 2 all the way to 4 (for the node socket.io server) and I've tried different javascript socket.io libraries for the browser client (from 2 to 3) and never seem to have any version compatibility issues. It's only the ESP32 SocketIO client that seems to have the problem navigating through the host layers. If I launch the exact same node server code and node_module versions on my development test server where I can connect directly to the node server through the internet and not through some load balancing / caching / proxy server then everything on the ESP32 works fine.

Here is what I get for debug when trying to connect to a host on opennode.io:

[WS-Client] Websocket Version: 2.3.2
[WS-Client] connect ws...
[WS-Client] connected to dev-test-01.openode.io:80.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1
Host: dev-test-01.openode.io:80
Connection: keep-alive
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 164 t: 2865
[WS-Client][sendHeader] sending header... Done (24549us).
[WS-Client][handleHeader] RX: HTTP/1.1 308 Permanent Redirect
[WS-Client][handleHeader] RX: Server: nginx/1.19.2
[WS-Client][handleHeader] RX: Date: Sun, 31 Jan 2021 06:49:41 GMT
[WS-Client][handleHeader] RX: Content-Type: text/html
[WS-Client][handleHeader] RX: Content-Length: 171
[WS-Client][handleHeader] RX: Connection: keep-alive
[WS-Client][handleHeader] RX: Location: https://dev-test-01.openode.io/socket.io/?EIO=3&transport=polling
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /socket.io/?EIO=3
[WS-Client][handleHeader]  - cKey: CYlqwQ/y7+6cCdrnJGaVkA==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 308
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: 
[WS-Client][handleHeader] still missing cSessionId try socket.io V3
[WS-Client][handleHeader] socket.io json: <html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.19.2</center>
</body>
</html>
[WS-Client][handleHeader] RX: <html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.19.2</center>
</body>
</html>
[WS-Client][handleHeader] Header error (<html>
<head><title>308 Permanent Redirect</title></head>
<body>
<center><h1>308 Permanent Redirect</h1></center>
<hr><center>nginx/1.19.2</center>
</body>
</html>)
[WS-Client][handleClientData] header response timeout.. disconnecting!
[WS-Client] client disconnected.
[wsIOc] Disconnected!
[wsIOc] Disconnected!

That one seems to be an issue where it's not allowing non-SSL connections and trying to redirect to the SSL https url and I don't have enough free heap in my ESP32 app to enable SSL right now so I need to connect non-SSL.

and here is what I get using Node Chef hosting:

[WS-Client] Websocket Version: 2.3.2
[WS-Client] connect ws...
[WS-Client] connected to dev-test-13554.nodechef.com:80.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1
Host: dev-test-13554.nodechef.com:80
Connection: keep-alive
Origin: file://
User-Agent: arduino-WebSocket-Client

[write] n: 170 t: 2967
[WS-Client][sendHeader] sending header... Done (25106us).
[D][WiFiClient.cpp:509] connected(): Disconnected: RES: 0, ERR: 128
[WS-Client] connection lost.
[WS-Client] client disconnected.
[wsIOc] Disconnected!
[wsIOc] Disconnected!
[WS-Client] connect ws...
[WS-Client] connected to dev-test-13554.nodechef.com:80.
[WS-Client][sendHeader] sending header...
[WS-Client][sendHeader] handshake GET /socket.io/?EIO=3&transport=polling HTTP/1.1
Host: dev-test-13554.nodechef.com:80
Connection: keep-alive
Origin: file://
User-Agent: arduino-WebSocket-Client

not sure what's going on with this one because I can connect non-SSL from the web browser client and it works fine... I can share some browser header and connection data if that would be helpful. I can also leave one of these test server up and running if someone would like to try looking at it themselves, otherwise I think I am at a loss if no one has any ideas how to get around these issues.

My next work around / solution will be to use a third part pub / sub service like pubnub or other service and call it a day but I would rather not have another service that I have to depend on that may get shutdown one day and leave me hanging.

circuitsforfun avatar Jan 31 '21 07:01 circuitsforfun

HI, I have a similar issue. When the esp32 is on its latest core sdk (2.0.3) the connection is not stable, it breakds randomly or when any message is sent to the module. But on the core (1.0.6) it's working perfectly. Sometimes it say client disconnects. sometimes it disconnects cause of header response timeout. I am in a fix cause the core upgrade has some major fixes, that i need. Hope this helps debug it, @Links2004 .

Anything you would like from my side do let me know.

11:00:14.512 -> ets Jul 29 2019 12:21:46
11:00:14.512 -> 
11:00:14.512 -> rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
11:00:14.512 -> configsip: 0, SPIWP:0xee
11:00:14.512 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
11:00:14.546 -> mode:DIO, clock div:1
11:00:14.546 -> load:0x3fff0030,len:1344
11:00:14.546 -> load:0x40078000,len:13516
11:00:14.546 -> load:0x40080400,len:3604
11:00:14.546 -> entry 0x400805f0
11:00:15.011 -> [WS-Client] Websocket Version: 2.3.6
11:00:15.011 -> [wsIOc] found EIO=4 disable EIO ping on client
11:00:28.376 -> [WS-Client] connect ws...
11:00:28.575 -> [WS-Client] connected to domain:port.
11:00:28.575 -> [WS-Client][sendHeader] sending header...
11:00:28.609 -> [WS-Client][sendHeader] handshake GET /socket.io/?EIO=4 HTTP/1.1
11:00:28.609 -> Host: domain:port
11:00:28.609 -> Connection: keep-alive
11:00:28.609 -> Origin: file://
11:00:28.609 -> User-Agent: arduino-WebSocket-Client
11:00:28.609 -> 
11:00:28.609 -> [write] n: 235 t: 13795
11:00:28.609 -> [WS-Client][sendHeader] sending header... Done (27235us).
11:00:31.136 -> [WS-Client][handleHeader] RX: HTTP/1.1 200 OK
11:00:31.136 -> [WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
11:00:31.169 -> [WS-Client][handleHeader] RX: Content-Length: 98
11:00:31.169 -> [WS-Client][handleHeader] RX: Date: Fri, 24 Jun 2022 05:30:28 GMT
11:00:31.169 -> [WS-Client][handleHeader] RX: Connection: keep-alive
11:00:31.169 -> [WS-Client][handleHeader] RX: Keep-Alive: timeout=5
11:00:31.169 -> [WS-Client][handleHeader] Header read fin.
11:00:31.169 -> [WS-Client][handleHeader] Client settings:
11:00:31.202 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:00:31.202 -> [WS-Client][handleHeader]  - cKey: HD2ROLg28XTpych52JFcDg==
11:00:31.202 -> [WS-Client][handleHeader] Server header:
11:00:31.202 -> [WS-Client][handleHeader]  - cCode: 200
11:00:31.202 -> [WS-Client][handleHeader]  - cIsUpgrade: 0
11:00:31.202 -> [WS-Client][handleHeader]  - cIsWebsocket: 1
11:00:31.202 -> [WS-Client][handleHeader]  - cAccept: 
11:00:31.242 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:00:31.242 -> [WS-Client][handleHeader]  - cExtensions: 
11:00:31.242 -> [WS-Client][handleHeader]  - cVersion: 0
11:00:31.242 -> [WS-Client][handleHeader]  - cSessionId: 
11:00:31.242 -> [WS-Client][handleHeader] still missing cSessionId try socket.io V3
11:00:31.242 -> [WS-Client][handleHeader] socket.io json: 0{"sid":"sYH5lMZRmPc4CBwpAMeW","upgrades":["websocket"],"pingInterval":40000,"pingTimeout":120000}
11:00:31.242 -> [WS-Client][handleHeader]  - cSessionId: sYH5lMZRmPc4CBwpAMeW
11:00:31.269 -> [WS-Client][handleHeader] Header read fin.
11:00:31.269 -> [WS-Client][handleHeader] Client settings:
11:00:31.269 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:00:31.269 -> [WS-Client][handleHeader]  - cKey: HD2ROLg28XTpych52JFcDg==
11:00:31.269 -> [WS-Client][handleHeader] Server header:
11:00:31.302 -> [WS-Client][handleHeader]  - cCode: 200
11:00:31.302 -> [WS-Client][handleHeader]  - cIsUpgrade: 0
11:00:31.302 -> [WS-Client][handleHeader]  - cIsWebsocket: 1
11:00:31.302 -> [WS-Client][handleHeader]  - cAccept: 
11:00:31.302 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:00:31.302 -> [WS-Client][handleHeader]  - cExtensions: 
11:00:31.302 -> [WS-Client][handleHeader]  - cVersion: 0
11:00:31.302 -> [WS-Client][handleHeader]  - cSessionId: sYH5lMZRmPc4CBwpAMeW
11:00:31.302 -> [WS-Client][handleHeader] found cSessionId
11:00:31.335 -> [WS-Client][sendHeader] sending header...
11:00:31.335 -> [WS-Client][sendHeader] handshake GET /socket.io/EIO=4transport=websocket&sid=sYH5lMZRmPc4CBwpAMeW HTTP/1.1
11:00:31.335 -> Host: domain:port
11:00:31.335 -> Connection: Upgrade
11:00:31.335 -> Upgrade: websocket
11:00:31.335 -> Sec-WebSocket-Version: 13
11:00:31.335 -> Sec-WebSocket-Key: z5bQLeyIToaLl5qfUHha7A==
11:00:31.368 -> Sec-WebSocket-Protocol: arduino
11:00:31.368 -> Origin: file://
11:00:31.368 -> User-Agent: arduino-WebSocket-Client
11:00:31.368 -> 
11:00:31.368 -> [write] n: 384 t: 16542
11:00:31.368 -> [WS-Client][sendHeader] sending header... Done (40390us).
11:00:33.663 -> [WS-Client][handleHeader] RX: HTTP/1.1 101 Switching Protocols
11:00:33.663 -> [WS-Client][handleHeader] RX: Upgrade: websocket
11:00:33.663 -> [WS-Client][handleHeader] RX: Connection: Upgrade
11:00:33.663 -> [WS-Client][handleHeader] RX: Sec-WebSocket-Accept: qALOf942/yUYKgO8Uz3dKPPP1rc=
11:00:33.696 -> [WS-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino
11:00:33.696 -> [WS-Client][handleHeader] Header read fin.
11:00:33.696 -> [WS-Client][handleHeader] Client settings:
11:00:33.696 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:00:33.696 -> [WS-Client][handleHeader]  - cKey: z5bQLeyIToaLl5qfUHha7A==
11:00:33.696 -> [WS-Client][handleHeader] Server header:
11:00:33.729 -> [WS-Client][handleHeader]  - cCode: 101
11:00:33.729 -> [WS-Client][handleHeader]  - cIsUpgrade: 1
11:00:33.729 -> [WS-Client][handleHeader]  - cIsWebsocket: 1
11:00:33.729 -> [WS-Client][handleHeader]  - cAccept: qALOf942/yUYKgO8Uz3dKPPP1rc=
11:00:33.729 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:00:33.729 -> [WS-Client][handleHeader]  - cExtensions: 
11:00:33.729 -> [WS-Client][handleHeader]  - cVersion: 0
11:00:33.729 -> [WS-Client][handleHeader]  - cSessionId: sYH5lMZRmPc4CBwpAMeW
11:00:33.762 -> [WS-Client][handleHeader] Websocket connection init done.
11:00:33.762 -> [WS][0][headerDone] Header Handling Done.
11:00:33.762 -> [wsIOc] Connected to url: /socket.io/?EIO=4
11:00:33.762 -> [WS][0][sendFrame] ------- send message frame -------
11:00:33.762 -> [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 6 headerToPayload: 0
11:00:33.762 -> [WS][0][sendFrame] text: 2probe
11:00:33.795 -> [WS][0][sendFrame] pack to one TCP package...
11:00:33.795 -> [write] n: 12 t: 18964
11:00:33.795 -> [WS][0][sendFrame] sending Frame Done (4000us).
11:00:33.795 -> [WS][0][sendFrame] ------- send message frame -------
11:00:33.795 -> [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 1 headerToPayload: 1
11:00:33.795 -> [WS][0][sendFrame] text: 5
11:00:33.795 -> [write] n: 7 t: 18986
11:00:33.795 -> [WS][0][sendFrame] sending Frame Done (3343us).
11:00:33.829 -> [write] n: 6 t: 18993
11:00:33.829 -> [write] n: 2 t: 18996
11:00:33.829 -> [write] n: 1 t: 19000
11:00:33.829 -> [write] n: 6 t: 19003
11:00:33.829 -> [write] n: 2 t: 19006
11:00:33.829 -> [write] n: 100 t: 19009
11:00:33.862 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:00:33.862 -> [readCb] n: 2 t: 19056
11:00:33.862 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:00:33.895 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:00:33.895 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 1
11:00:33.895 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 6
11:00:33.895 -> [readCb] n: 6 t: 19078
11:00:33.895 -> [WS][0][handleWebsocket] text: 3probe
11:00:33.895 -> [wsIOc] get pong
11:00:33.895 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:00:33.895 -> [readCb] n: 2 t: 19090
11:00:33.895 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:00:33.928 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:00:33.928 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 1
11:00:33.928 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 32
11:00:33.928 -> [readCb] n: 32 t: 19112
11:00:33.928 -> [WS][0][handleWebsocket] text: 40{"sid":"4ZenVe_l5ReNdJ08AMea"}
11:00:33.928 -> [wsIOc] connected (30): {"sid":"4ZenVe_l5ReNdJ08AMea"}
11:01:10.732 -> [WS-Client] connection lost.
11:01:10.732 -> [WS-Client] client disconnected.
11:01:10.732 -> [wsIOc] Disconnected!
11:01:11.231 -> [WS-Client] connect ws...
11:01:11.397 -> [WS-Client] connected to domain:port.
11:01:11.397 -> [WS-Client][sendHeader] sending header...
11:01:11.397 -> [WS-Client][sendHeader] handshake GET /socket.io/?EIO=4&transport=polling HTTP/1.1
11:01:11.397 -> Host: domain:port
11:01:11.397 -> Connection: keep-alive
11:01:11.397 -> Origin: file://
11:01:11.430 -> User-Agent: arduino-WebSocket-Client
11:01:11.430 -> 
11:01:11.430 -> [write] n: 235 t: 56599
11:01:11.430 -> [WS-Client][sendHeader] sending header... Done (27176us).
11:01:13.991 -> [WS-Client][handleHeader] RX: HTTP/1.1 200 OK
11:01:13.991 -> [WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
11:01:13.991 -> [WS-Client][handleHeader] RX: Content-Length: 98
11:01:14.024 -> [WS-Client][handleHeader] RX: Date: Fri, 24 Jun 2022 05:31:11 GMT
11:01:14.024 -> [WS-Client][handleHeader] RX: Connection: keep-alive
11:01:14.024 -> [WS-Client][handleHeader] RX: Keep-Alive: timeout=5
11:01:14.024 -> [WS-Client][handleHeader] Header read fin.
11:01:14.024 -> [WS-Client][handleHeader] Client settings:
11:01:14.024 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:01:14.057 -> [WS-Client][handleHeader]  - cKey: 00kZ83DxEk9VOFu3JLA7dw==
11:01:14.057 -> [WS-Client][handleHeader] Server header:
11:01:14.057 -> [WS-Client][handleHeader]  - cCode: 200
11:01:14.057 -> [WS-Client][handleHeader]  - cIsUpgrade: 0
11:01:14.057 -> [WS-Client][handleHeader]  - cIsWebsocket: 0
11:01:14.057 -> [WS-Client][handleHeader]  - cAccept: 
11:01:14.057 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:01:14.057 -> [WS-Client][handleHeader]  - cExtensions: 
11:01:14.090 -> [WS-Client][handleHeader]  - cVersion: 0
11:01:14.090 -> [WS-Client][handleHeader]  - cSessionId: 
11:01:14.090 -> [WS-Client][handleHeader] still missing cSessionId try socket.io V3
11:01:14.090 -> [WS-Client][handleHeader] socket.io json: 0{"sid":"8ZwwvMtWgCVPQzxTAMfV","upgrades":["websocket"],"pingInterval":40000,"pingTimeout":120000}
11:01:14.090 -> [WS-Client][handleHeader]  - cSessionId: 8ZwwvMtWgCVPQzxTAMfV
11:01:14.123 -> [WS-Client][handleHeader] Header read fin.
11:01:14.123 -> [WS-Client][handleHeader] Client settings:
11:01:14.123 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:01:14.123 -> [WS-Client][handleHeader]  - cKey: 00kZ83DxEk9VOFu3JLA7dw==
11:01:14.123 -> [WS-Client][handleHeader] Server header:
11:01:14.123 -> [WS-Client][handleHeader]  - cCode: 200
11:01:14.123 -> [WS-Client][handleHeader]  - cIsUpgrade: 0
11:01:14.156 -> [WS-Client][handleHeader]  - cIsWebsocket: 0
11:01:14.156 -> [WS-Client][handleHeader]  - cAccept: 
11:01:14.156 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:01:14.156 -> [WS-Client][handleHeader]  - cExtensions: 
11:01:14.156 -> [WS-Client][handleHeader]  - cVersion: 0
11:01:14.156 -> [WS-Client][handleHeader]  - cSessionId: 8ZwwvMtWgCVPQzxTAMfV
11:01:14.156 -> [WS-Client][handleHeader] found cSessionId
11:01:14.156 -> [WS-Client][sendHeader] sending header...
11:01:14.190 -> [WS-Client][sendHeader] handshake GET /socket.io/?EIO=4&transport=websocket&sid=8ZwwvMtWgCVPQzxTAMfV HTTP/1.1
11:01:14.190 -> Host: domain:port
11:01:14.190 -> Connection: Upgrade
11:01:14.190 -> Upgrade: websocket
11:01:14.190 -> Sec-WebSocket-Version: 13
11:01:14.190 -> Sec-WebSocket-Key: 0EJS1iqVu+qIWvqf4i4nxw==
11:01:14.190 -> Sec-WebSocket-Protocol: arduino
11:01:14.190 -> Origin: file://
11:01:14.223 -> User-Agent: arduino-WebSocket-Client
11:01:14.223 -> 
11:01:14.223 -> [write] n: 384 t: 59390
11:01:14.223 -> [WS-Client][sendHeader] sending header... Done (40414us).
11:01:14.855 -> [WS-Client][handleHeader] RX: HTTP/1.1 101 Switching Protocols
11:01:14.888 -> [WS-Client][handleHeader] RX: Upgrade: websocket
11:01:14.888 -> [WS-Client][handleHeader] RX: Connection: Upgrade
11:01:14.888 -> [WS-Client][handleHeader] RX: Sec-WebSocket-Accept: 4PmmuXOO/ONgSgMjllRpvjBtZAU=
11:01:14.888 -> [WS-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino
11:01:14.888 -> [WS-Client][handleHeader] Header read fin.
11:01:14.888 -> [WS-Client][handleHeader] Client settings:
11:01:14.888 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:01:14.921 -> [WS-Client][handleHeader]  - cKey: 0EJS1iqVu+qIWvqf4i4nxw==
11:01:14.921 -> [WS-Client][handleHeader] Server header:
11:01:14.921 -> [WS-Client][handleHeader]  - cCode: 101
11:01:14.921 -> [WS-Client][handleHeader]  - cIsUpgrade: 1
11:01:14.921 -> [WS-Client][handleHeader]  - cIsWebsocket: 1
11:01:14.921 -> [WS-Client][handleHeader]  - cAccept: 4PmmuXOO/ONgSgMjllRpvjBtZAU=
11:01:14.955 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:01:14.955 -> [WS-Client][handleHeader]  - cExtensions: 
11:01:14.955 -> [WS-Client][handleHeader]  - cVersion: 0
11:01:14.955 -> [WS-Client][handleHeader]  - cSessionId: 8ZwwvMtWgCVPQzxTAMfV
11:01:14.955 -> [WS-Client][handleHeader] Websocket connection init done.
11:01:14.955 -> [WS][0][headerDone] Header Handling Done.
11:01:14.955 -> [wsIOc] Connected to url: /socket.io/?EIO=4
11:01:14.988 -> [WS][0][sendFrame] ------- send message frame -------
11:01:14.988 -> [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 6 headerToPayload: 0
11:01:14.988 -> [WS][0][sendFrame] text: 2probe
11:01:14.988 -> [WS][0][sendFrame] pack to one TCP package...
11:01:14.988 -> [write] n: 12 t: 60173
11:01:14.988 -> [WS][0][sendFrame] sending Frame Done (3247us).
11:01:14.988 -> [WS][0][sendFrame] ------- send message frame -------
11:01:14.988 -> [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 1 headerToPayload: 1
11:01:15.021 -> [WS][0][sendFrame] text: 5
11:01:15.021 -> [write] n: 7 t: 60194
11:01:15.021 -> [WS][0][sendFrame] sending Frame Done (3045us).
11:01:15.021 -> [write] n: 6 t: 60201
11:01:15.021 -> [write] n: 2 t: 60204
11:01:15.021 -> [write] n: 1 t: 60207
11:01:15.021 -> [write] n: 6 t: 60211
11:01:15.021 -> [write] n: 2 t: 60214
11:01:15.054 -> [write] n: 100 t: 60218
11:01:15.054 -> [WS-Client] sending HB ping
11:01:15.054 -> [WS][0][sendFrame] ------- send message frame -------
11:01:15.054 -> [WS][0][sendFrame] fin: 1 opCode: 9 mask: 1 length: 0 headerToPayload: 0
11:01:15.054 -> [write] n: 6 t: 60235
11:01:15.121 -> [WS][0][sendFrame] sending Frame Done (64629us).
11:01:15.121 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:01:15.121 -> [readCb] n: 2 t: 60309
11:01:15.121 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:01:15.121 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:01:15.160 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 1
11:01:15.160 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 6
11:01:15.160 -> [readCb] n: 6 t: 60331
11:01:15.160 -> [WS][0][handleWebsocket] text: 3probe
11:01:15.160 -> [wsIOc] get pong
11:01:15.160 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:01:15.160 -> [readCb] n: 2 t: 60343
11:01:15.160 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:01:15.160 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:01:15.160 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 1
11:01:15.188 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 32
11:01:15.188 -> [readCb] n: 32 t: 60365
11:01:15.188 -> [WS][0][handleWebsocket] text: 40{"sid":"b7pE0_glS4IY5Va8AMfa"}
11:01:15.188 -> [wsIOc] connected (30): {"sid":"b7pE0_glS4IY5Va8AMfa"}
11:01:16.983 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:01:17.016 -> [readCb] n: 2 t: 62181
11:01:17.016 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:01:17.016 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:01:17.016 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 10
11:01:17.016 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 0
11:01:17.016 -> [WS][0][handleWebsocket] get pong ()
11:01:53.756 -> [WS-Client] connection lost.
11:01:53.756 -> [WS-Client] client disconnected.
11:01:53.756 -> [wsIOc] Disconnected!
11:01:54.254 -> [WS-Client] connect ws...
11:01:54.387 -> [WS-Client] connected to domain:port.
11:01:54.387 -> [WS-Client][sendHeader] sending header...
11:01:54.387 -> [WS-Client][sendHeader] handshake GET /socket.io/?EIO=4&transport=polling HTTP/1.1
11:01:54.420 -> Host: domain:port
11:01:54.420 -> Connection: keep-alive
11:01:54.420 -> Origin: file://
11:01:54.420 -> User-Agent: arduino-WebSocket-Client
11:01:54.420 -> 
11:01:54.420 -> [write] n: 235 t: 99608
11:01:54.420 -> [WS-Client][sendHeader] sending header... Done (27152us).
11:01:55.416 -> [WS-Client][handleHeader] RX: HTTP/1.1 200 OK
11:01:55.416 -> [WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
11:01:55.416 -> [WS-Client][handleHeader] RX: Content-Length: 98
11:01:55.449 -> [WS-Client][handleHeader] RX: Date: Fri, 24 Jun 2022 05:31:54 GMT
11:01:55.449 -> [WS-Client][handleHeader] RX: Connection: keep-alive
11:01:55.449 -> [WS-Client][handleHeader] RX: Keep-Alive: timeout=5
11:01:55.449 -> [WS-Client][handleHeader] Header read fin.
11:01:55.449 -> [WS-Client][handleHeader] Client settings:
11:01:55.449 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:01:55.482 -> [WS-Client][handleHeader]  - cKey: uR1SI++YFixrAHSmjYbUVA==
11:01:55.482 -> [WS-Client][handleHeader] Server header:
11:01:55.482 -> [WS-Client][handleHeader]  - cCode: 200
11:01:55.482 -> [WS-Client][handleHeader]  - cIsUpgrade: 0
11:01:55.482 -> [WS-Client][handleHeader]  - cIsWebsocket: 0
11:01:55.482 -> [WS-Client][handleHeader]  - cAccept: 
11:01:55.482 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:01:55.482 -> [WS-Client][handleHeader]  - cExtensions: 
11:01:55.515 -> [WS-Client][handleHeader]  - cVersion: 0
11:01:55.515 -> [WS-Client][handleHeader]  - cSessionId: 
11:01:55.515 -> [WS-Client][handleHeader] still missing cSessionId try socket.io V3
11:01:55.515 -> [WS-Client][handleHeader] socket.io json: 0{"sid":"WagJ0KTBLGeK62ybAMgQ","upgrades":["websocket"],"pingInterval":40000,"pingTimeout":120000}
11:01:55.515 -> [WS-Client][handleHeader]  - cSessionId: WagJ0KTBLGeK62ybAMgQ
11:01:55.548 -> [WS-Client][handleHeader] Header read fin.
11:01:55.548 -> [WS-Client][handleHeader] Client settings:
11:01:55.548 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:01:55.548 -> [WS-Client][handleHeader]  - cKey: uR1SI++YFixrAHSmjYbUVA==
11:01:55.548 -> [WS-Client][handleHeader] Server header:
11:01:55.548 -> [WS-Client][handleHeader]  - cCode: 200
11:01:55.548 -> [WS-Client][handleHeader]  - cIsUpgrade: 0
11:01:55.581 -> [WS-Client][handleHeader]  - cIsWebsocket: 0
11:01:55.581 -> [WS-Client][handleHeader]  - cAccept: 
11:01:55.581 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:01:55.581 -> [WS-Client][handleHeader]  - cExtensions: 
11:01:55.581 -> [WS-Client][handleHeader]  - cVersion: 0
11:01:55.581 -> [WS-Client][handleHeader]  - cSessionId: WagJ0KTBLGeK62ybAMgQ
11:01:55.581 -> [WS-Client][handleHeader] found cSessionId
11:01:55.581 -> [WS-Client][sendHeader] sending header...
11:01:55.615 -> [WS-Client][sendHeader] handshake GET /socket.io/?EIO=4&transport=websocket&sid=WagJ0KTBLGeK62ybAMgQ HTTP/1.1
11:01:55.615 -> Host: domain:port
11:01:55.615 -> Connection: Upgrade
11:01:55.615 -> Upgrade: websocket
11:01:55.615 -> Sec-WebSocket-Version: 13
11:01:55.615 -> Sec-WebSocket-Key: UjjNb/LPvBpQjV5S3E47ig==
11:01:55.615 -> Sec-WebSocket-Protocol: arduino
11:01:55.615 -> Origin: file://
11:01:55.648 -> User-Agent: arduino-WebSocket-Client
11:01:55.648 -> 
11:01:55.648 -> [write] n: 384 t: 100817
11:01:55.648 -> [WS-Client][sendHeader] sending header... Done (40558us).
11:01:59.170 -> [WS-Client][handleHeader] RX: HTTP/1.1 101 Switching Protocols
11:01:59.170 -> [WS-Client][handleHeader] RX: Upgrade: websocket
11:01:59.170 -> [WS-Client][handleHeader] RX: Connection: Upgrade
11:01:59.170 -> [WS-Client][handleHeader] RX: Sec-WebSocket-Accept: GmhqhxJGUds2+suWDl7b8PbSwC8=
11:01:59.203 -> [WS-Client][handleHeader] RX: Sec-WebSocket-Protocol: arduino
11:01:59.203 -> [WS-Client][handleHeader] Header read fin.
11:01:59.203 -> [WS-Client][handleHeader] Client settings:
11:01:59.203 -> [WS-Client][handleHeader]  - cURL: /socket.io/?EIO=4
11:01:59.203 -> [WS-Client][handleHeader]  - cKey: UjjNb/LPvBpQjV5S3E47ig==
11:01:59.203 -> [WS-Client][handleHeader] Server header:
11:01:59.237 -> [WS-Client][handleHeader]  - cCode: 101
11:01:59.237 -> [WS-Client][handleHeader]  - cIsUpgrade: 1
11:01:59.237 -> [WS-Client][handleHeader]  - cIsWebsocket: 1
11:01:59.237 -> [WS-Client][handleHeader]  - cAccept: GmhqhxJGUds2+suWDl7b8PbSwC8=
11:01:59.237 -> [WS-Client][handleHeader]  - cProtocol: arduino
11:01:59.237 -> [WS-Client][handleHeader]  - cExtensions: 
11:01:59.237 -> [WS-Client][handleHeader]  - cVersion: 0
11:01:59.237 -> [WS-Client][handleHeader]  - cSessionId: WagJ0KTBLGeK62ybAMgQ
11:01:59.270 -> [WS-Client][handleHeader] Websocket connection init done.
11:01:59.270 -> [WS][0][headerDone] Header Handling Done.
11:01:59.270 -> [wsIOc] Connected to url: /socket.io/?EIO=4
11:01:59.270 -> [WS][0][sendFrame] ------- send message frame -------
11:01:59.270 -> [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 6 headerToPayload: 0
11:01:59.303 -> [WS][0][sendFrame] text: 2probe
11:01:59.303 -> [WS][0][sendFrame] pack to one TCP package...
11:01:59.303 -> [write] n: 12 t: 104475
11:01:59.303 -> [WS][0][sendFrame] sending Frame Done (4069us).
11:01:59.303 -> [WS][0][sendFrame] ------- send message frame -------
11:01:59.303 -> [WS][0][sendFrame] fin: 1 opCode: 1 mask: 1 length: 1 headerToPayload: 1
11:01:59.303 -> [WS][0][sendFrame] text: 5
11:01:59.303 -> [write] n: 7 t: 104497
11:01:59.303 -> [WS][0][sendFrame] sending Frame Done (3503us).
11:01:59.336 -> [write] n: 6 t: 104505
11:01:59.336 -> [write] n: 2 t: 104508
11:01:59.336 -> [write] n: 1 t: 104511
11:01:59.336 -> [write] n: 6 t: 104515
11:01:59.336 -> [write] n: 2 t: 104518
11:01:59.336 -> [write] n: 100 t: 104521
11:01:59.369 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:01:59.402 -> [readCb] n: 2 t: 104568
11:01:59.402 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:01:59.402 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:01:59.402 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 1
11:01:59.402 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 6
11:01:59.402 -> [readCb] n: 6 t: 104590
11:01:59.402 -> [WS][0][handleWebsocket] text: 3probe
11:01:59.402 -> [wsIOc] get pong
11:01:59.402 -> [WS][0][handleWebsocketWaitFor] size: 2 cWsRXsize: 0
11:01:59.435 -> [readCb] n: 2 t: 104602
11:01:59.435 -> [WS][0][handleWebsocketWaitFor][readCb] size: 2 ok: 1
11:01:59.435 -> [WS][0][handleWebsocket] ------- read massage frame -------
11:01:59.435 -> [WS][0][handleWebsocket] fin: 1 rsv1: 0 rsv2: 0 rsv3 0  opCode: 1
11:01:59.435 -> [WS][0][handleWebsocket] mask: 0 payloadLen: 32
11:01:59.435 -> [readCb] n: 32 t: 104624
11:01:59.435 -> [WS][0][handleWebsocket] text: 40{"sid":"qgfHb0GpaiRFmkPQAMgU"}
11:01:59.435 -> [wsIOc] connected (30): {"sid":"qgfHb0GpaiRFmkPQAMgU"}

The wifi and server used in both cases are the same. These are the logs at SDK 2.0.3

11:42:16.777 -> Connection: Upgrade
11:42:16.777 -> Upgrade: websocket
11:42:16.777 -> Sec-WebSocket-Version: 13
11:42:16.777 -> Sec-WebSocket-Key: TqFofGJVWfGXotwJMl8FQA==
11:42:16.777 -> Sec-WebSocket-Protocol: arduino
11:42:16.777 -> Origin: file://
11:42:16.777 -> User-Agent: arduino-WebSocket-Client
11:42:16.810 -> 
11:42:16.810 -> [write] n: 384 t: 128785
11:42:16.810 -> [WS-Client][sendHeader] sending header... Done (40512us).
11:42:21.816 -> [WS-Client][handleClientData] header response timeout.. disconnecting!
11:42:21.816 -> [WS-Client] client disconnected.
11:42:21.816 -> [wsIOc] Disconnected!

the header respnse timeout

shrynshjn avatar Jun 24 '22 05:06 shrynshjn

I have tried increasing the TCP timeout, to 1minute, all it does is delay the disconnect time. And doesn't improve the working.

shrynshjn avatar Jun 24 '22 06:06 shrynshjn

something happens when HB pings are sent I trigger the restart when the socket io gets disconnected, but there's no reason for it to disconnect

[WS][0][handleWebsocket] text: 40{"sid":"7MHGHteSvxHw54LgAKtR"}
[wsIOc] connected (30): {"sid":"7MHGHteSvxHw54LgAKtR"}
09:40:31.425 -> [WS-Client] sending HB ping
09:40:31.425 -> [WS][0][sendFrame] ------- send message frame -------
09:40:31.425 -> [WS][0][sendFrame] fin: 1 opCode: 9 mask: 1 length: 0 headerToPayload: 0
09:40:31.425 -> [write] n: 6 t: 60014
09:40:31.425 -> [WS][0][sendFrame] sending Frame Done (3507us).
09:40:31.472 -> [WS-Client] connection lost.
09:40:31.472 -> [WS-Client] client disconnected.
09:40:31.472 -> ets Jul 29 2019 12:21:46
09:40:31.472 -> 
09:40:31.472 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
09:40:31.472 -> configsip: 0, SPIWP:0xee
09:40:31.472 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
09:40:31.472 -> mode:DIO, clock div:1
09:40:31.472 -> load:0x3fff0030,len:1344
09:40:31.472 -> load:0x40078000,len:13516
09:40:31.472 -> load:0x40080400,len:3604
09:40:31.472 -> entry 0x400805f0

shrynshjn avatar Jun 25 '22 04:06 shrynshjn

when i use async connect , i got same errors.

[WS-Server][0] Disconnect client
[WS-Client] asyncConnect...
[WS-Client] connected to 192.168.2.17:8081.
[WS-Client][sendHeader] sending header...
[String] 'GET /WALL- ... t-Client
': Reallocating large String(142 -> 144 bytes)
[WS-Client][sendHeader] handshake GET /WALL-E-Gateway/?EIO=4&transport=polling HTTP/1.1
Host: 192.168.2.17:8081
Connection: keep-alive
User-Agent: arduino-WebSocket-Client

[write] n: 144 t: 159340
[WS-Client][sendHeader] sending header... Done (25960us).
[WS-Client][handleHeader] RX: HTTP/1.1 200 OK
[WS-Client][handleHeader] RX: Access-Control-Allow-Origin: *
[WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
[WS-Client][handleHeader] RX: Content-Length: 118
[WS-Client][handleHeader] RX: cache-control: no-store
[WS-Client][handleHeader] RX: Date: Sat, 13 Jan 2024 11:59:59 GMT
[WS-Client][handleHeader] RX: Connection: keep-alive
[WS-Client][handleHeader] RX: Keep-Alive: timeout=5
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /WALL-E-Gateway/?EIO=4
[WS-Client][handleHeader]  - cKey: zwFU45GDBXserfsJ99a6Vw==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 200
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: 
[WS-Client][handleHeader] still missing cSessionId try socket.io V3
[WS-Server][0] Disconnect client
[WS-Client] asyncConnect...
[WS-Client] connected to 192.168.2.17:8081.
[WS-Client][sendHeader] sending header...
[String] 'GET /WALL- ... t-Client
': Reallocating large String(142 -> 144 bytes)
[WS-Client][sendHeader] handshake GET /WALL-E-Gateway/?EIO=4&transport=polling HTTP/1.1
Host: 192.168.2.17:8081
Connection: keep-alive
User-Agent: arduino-WebSocket-Client

[write] n: 144 t: 164401
[WS-Client][sendHeader] sending header... Done (25960us).
[WS-Client][handleHeader] RX: HTTP/1.1 200 OK
[WS-Client][handleHeader] RX: Access-Control-Allow-Origin: *
[WS-Client][handleHeader] RX: Content-Type: text/plain; charset=UTF-8
[WS-Client][handleHeader] RX: Content-Length: 118
[WS-Client][handleHeader] RX: cache-control: no-store
[WS-Client][handleHeader] RX: Date: Sat, 13 Jan 2024 12:00:04 GMT
[WS-Client][handleHeader] RX: Connection: keep-alive
[WS-Client][handleHeader] RX: Keep-Alive: timeout=5
[WS-Client][handleHeader] Header read fin.
[WS-Client][handleHeader] Client settings:
[WS-Client][handleHeader]  - cURL: /WALL-E-Gateway/?EIO=4
[WS-Client][handleHeader]  - cKey: EVNCFvkjUN33s+Mr83Ktxw==
[WS-Client][handleHeader] Server header:
[WS-Client][handleHeader]  - cCode: 200
[WS-Client][handleHeader]  - cIsUpgrade: 0
[WS-Client][handleHeader]  - cIsWebsocket: 1
[WS-Client][handleHeader]  - cAccept: 
[WS-Client][handleHeader]  - cProtocol: arduino
[WS-Client][handleHeader]  - cExtensions: 
[WS-Client][handleHeader]  - cVersion: 0
[WS-Client][handleHeader]  - cSessionId: 
[WS-Client][handleHeader] still missing cSessionId try socket.io V3

guotingchao avatar Jan 13 '24 12:01 guotingchao