Credenciales necesarias para Utilizar el Websocket
Credenciales necesarias para Utilizar el Websocket
- Requerimientos Previos:
- Previamente se debe haber generado una sesión mediante los endpoints de Auth.
- POST | /auth/login
- POST | /auth/refresh
- Previamente se debe haber generado una sesión mediante los endpoints de Auth.
Conexión al Websocket
- El websocket funciona internamente mediante Socket.IO + NodeJS Http Server.
- Se debe conectar directamente al dominio, es decir, si la api de express está saliendo por "api.glix.com" el websocket se debe conectar a ese dominio directo.
- La conexión al mismo se puede realizar de 2 formas:
- Conexión al Websocket directa (Sin Polling). [Recomendada]
- Conexión al Websocket por Polling.
¿Qué es Polling y Conexión Directa?
El Polling implica que el cliente consulta al servidor repetidamente a intervalos, mientras que los WebSockets establecen una conexión bidireccional, persistente y en tiempo real. El polling es más sencillo, pero menos eficiente.
- El Websocket requiere los tokens previamente generados por la sesión. El token de refresco lo va a obtener automáticmanete el servidor por las cookies, pero el token de acceso es necesario que se envíe por un header de autenticación.
nota
El Websocket no va a refrescar la sesión en ningún momento, solo va a validar que los tokens enviados enviados sean válidos y correspondan a una sesión activa.
- Una vez que el usuario se conecte va a ser asignado a una sala personal única identificada por su userId.
Ejemplo de Conexión
info
1. wss es el equivalente a https.
2. El websocket tiene desactivada la función serveClient, la cual permite enviar un cliente de Socket.io por la misma url.
- javascript
- typescript
javascript
<script src="https://cdn.socket.io/4.8.3/socket.io.min.js"></script>
<script>
const socket = io("wss://api.glix.com", {
transports: ["websocket", "polling"], // Se recomienda usar solamente websocket
timeout: 20000,
reconnection: true,
withCredentials: true,
auth: {
accessToken: "jsonwebtoken",
},
});
</script>
typescript
import { io } from "socket.io-client";
const socket = io("wss://api.glix.com", {
transports: ["websocket", "polling"], // Se recomienda usar solamente websocket
timeout: 20000,
reconnection: true,
withCredentials: true,
auth: {
accessToken: "jsonwebtoken",
},
});