Administración de usuarios conectados y aplicaciones cliente: rutas $connect
y $disconnect
En la siguiente sección se describe cómo utilizar las rutas $connect
y $disconnect
para la API de WebSocket.
La ruta $connect
Las aplicaciones cliente se conectan a la API de WebSocket enviando una solicitud de actualización de WebSocket. Si la solicitud se realiza correctamente, la ruta $connect
se ejecuta mientras se establece la conexión.
Dado que la conexión de WebSocket es una conexión con estado, solo se puede configurar la autorización en la ruta $connect
. AuthN
/AuthZ
solo se realizará en el momento de la conexión.
Hasta que se complete la ejecución de la integración asociada a la ruta $connect
, la solicitud de actualización está pendiente y la conexión real no se establece. Si la solicitud $connect
da error (por ejemplo, debido a un error de AuthN
/AuthZ
o de integración), la conexión no se realizará.
nota
Si se produce un error en la autorización en $connect
, la conexión no se establece y el cliente recibirá una respuesta 401
o 403
.
La configuración de una integración para $connect
es opcional. Considere la posibilidad de configurar una integración $connect
si:
-
Desea habilitar a los clientes para especificar subprotocolos mediante el campo
Sec-WebSocket-Protocol
. Para ver código de ejemplo, consulte Configuración de una ruta $connect que requiere un subprotocolo WebSocket. -
Desea recibir una notificación cuando los clientes se conectan.
-
Desea limitar las conexiones o controlar quién se conecta.
-
Desea que el backend envíe mensajes de respuesta a los clientes mediante una URL de devolución de llamada.
-
Desea almacenar los ID de conexión y otra información en una base de datos (por ejemplo, Amazon DynamoDB).
Transmitir información de conexión de la ruta $connect
Puede utilizar integraciones con y sin proxy para transferir información de la ruta $connect
a una base de datos u otro Servicio de AWS.
Para transferir información de conexión mediante una integración de proxy
En ese caso, puede acceder a la información de conexión desde una integración de proxy de Lambda. Utilice otro Servicio de AWS o función de AWS Lambda para publicar en la conexión.
La siguiente función de Lambda muestra cómo utilizar el objeto requestContext
para registrar el ID de conexión, el nombre de dominio, el nombre de etapa y las cadenas de consulta.
Para transferir información de conexión mediante una integración que no sea de proxy
-
Puede acceder a la información de conexión con una integración que no sea de proxy. Configure la solicitud de integración y proporcione una plantilla de solicitud de API de WebSocket. La siguiente plantilla de mapeo Velocity Template Language (VTL)
proporciona una solicitud de integración. Esta solicitud envía los siguientes detalles a una integración que no sea de proxy: -
ID de la conexión
-
Nombre del dominio
-
Nombre de la fase
-
Ruta
-
Encabezados
-
Cadenas de consulta
Esta solicitud envía el ID de conexión, el nombre de dominio, el nombre de etapa, las rutas, los encabezados y las cadenas de consulta a una integración que no sea de proxy.
{ "connectionId": "$context.connectionId", "domain": "$context.domainName", "stage": "$context.stage", "params": "$input.params()" }
Para obtener más información sobre la configuración de transformaciones de datos, consulte Transformaciones de datos para las API de WebSocket en API Gateway.
Para completar la solicitud de integración, establezca
StatusCode: 200
para la respuesta de integración. Para obtener más información sobre la configuración de una respuesta de integración, consulte Configuración de una respuesta de integración mediante la consola de API Gateway. -
La ruta $disconnect
La ruta $disconnect
se ejecuta una vez que se ha cerrado la conexión.
La conexión la puede cerrar el servidor o el cliente. Como la conexión ya está cerrada cuando se ejecuta, $disconnect
es un evento de mejor esfuerzo. API Gateway hará todo lo posible para entregar el evento $disconnect
a su integración, pero no puede garantizar la entrega.
El backend puede iniciar la desconexión mediante la API @connections
. Para obtener más información, consulte Uso de comandos de @connections en el servicio de backend.