Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

websocket reconnect using session id

I'm using Java and Websocket API for my application

This is the problem I face :

I open a websocket connection to connect through certain server :

ws = new WebSocket(targetURL);

When I send every message using ws, I always check the state of the ws first, by :

if(ws.readyState == 1) {
        ws.send(request);
} else {
        alert("THE CONNECTION IS CLOSED. PLEASE REFRESH YOUR BROWSER.");
}

I saved an information in my EndPoint during the communication between client and server. But sometimes, when I want to send message from client, the state is not 1, which means that the ws is no longer open (CMIIW). If I try to connect again using ws = new WebSocket(targetURL), it will create a new connection, thus the information in my EndPoint become lost.

So my question is : Is there any way to reconnect a closed connection of Websocket using Session ID or any other unique ID so that the information in my EndPoint can be preserved?

Thank you

like image 336
xemjas Avatar asked Oct 01 '22 01:10

xemjas


1 Answers

WebSockets use a HTTP handshake, and it will send whatever cookie they have for that origin. So a way of doing it, is assign a cookie to you clients, and they will forward it on connection. You could even set the cookie in the handshake response, if the framework you are using it allows it. You can use that cookie on connection to figure out the ID or assign a new ID if no cookie.

Other option is to create for example your own "hello" protocol, where the browser has to send a special command before start, indicating its ID if any, or just an null ID if it is first time.

But aside of the cookie, there is not built-in mechanism for that.

like image 133
vtortola Avatar answered Oct 13 '22 00:10

vtortola