Menu

JS Session and Socket Management

Sessions

Sessions facilitate a live communication stream between the Client SDK and Vonage API platform. Sessions are established by calling the login(token) method and enables the client to receive in-App Voice and Messaging events. The client connection is maintained through a WebSocket connection.

SDK Socket Connection Management

During the lifecycle of a Session, the socket managing the Session may experience connectivity issues, for example, due to local network conditions.

 

If the socket experiences connectivity issues, two things happen; The API Platform will dispatch a disconnect callback with CONNECTION_FAILED, and - by default, the SDK will automatically attempt to reconnect the socket and connect to the same Session. 

// Disconnect is the first callback fired
client.on("disconnect", () => {
   // You can update UI as required, but no further work is required to reconnect
}

There will be 5 reconnection attempts by default, starting at 1s intervals from losing the connection and increasing exponentially.

// This callback will fire for each reconnection attempt.
client.on("reconnecting", (retryCount) => {
   console.log(`reconnection attempt: ${retryCount}`) 
}

If the automatic reconnection attempts are successful there will be no other work required.

// This will fire on successful reconnection
client.on("reconnect", () => {}

If the reconnect attempts fail, the socket will transition to a disconnected state, and the error will be surfaced to the SDK through the NexmoClient error callback with the type “error:client:reconnection_failed”.

// Use the existing error callback on client 
client.on("error", (err:NexmoClientError) => {
   // Reconnection failure error type
   if (err.type == "error:client:reconnection_failed"){
        sleep(10*1000)

       // This call is required to restart connection after failure
       client.connect()
   }
}

After emitting this error event the SDK will no longer try to reconnect automatically. In order to restart the connection, call the client.connect() method. If the manual reconnection was successful within 5 minutes of the initial loss of the connection it will reconnect to the same session. As long as the reconnection is done within those 5 minutes, and, for example, there is an active call, the call will remain active. If the client does not reconnect after 5 minutes, there is a risk for the active call to be dropped.

 

Session Token Expiration

JWT Tokens are minted with an expiration timeframe and this timeframe is up to the developer to decide. These tokens are used to authenticate the creation of the session. 

 

When a session token expires, the API Platform will dispatch a disconnect callback with  TOKEN_EXPIRED in the `reason` parameter. After getting the disconnect callback, the automatic reconnection logic described above will fail due to the invalid token, so a minting of a new token and the calling for client.connect() is the way to keep the session alive. This should be done within the 5 minutes timeframe for the session to stay alive.

const nexmoApplication = await client.login("TOKEN");

// disconnect is called whenever a connection is closed

client.on("disconnect", (reason) => {
   if (reason == "TOKEN_EXPIRED") {
       
// GET NEW TOKEN FROM SOMEWHERE

       await nexmoApplication.updateToken("NEW_TOKEN")

       // on reconnection CAPI will automatically recreate session with updated token
       client.connect()
   }
   else {
       // The other option here is the CONNECTION_FAILED mentioned above  
       // SDK will automatically try and reconnect
   }
}

 

Please Note

We strongly recommend that you periodically update the session token before the previous token expires to prevent potential reconnection errors.

Was this article helpful?
0 out of 0 found this helpful
Follow
Have more questions? Submit a request