Gerenciar usuários conectados e aplicações clientes: rotas $connect
e $disconnect
A seção a seguir descreve como usar as rotas $connect
e $disconnect
para sua API de WebSocket.
A rota $connect
Os aplicativos do cliente se conectam à sua API WebSocket ao enviar uma solicitação de atualização do WebSocket. Se a solicitação for bem-sucedida, a rota $connect
é executada enquanto a conexão estiver sendo criada.
Como a conexão do WebSocket é uma conexão stateful, você pode configurar a autorização somente na rota $connect
. AuthN
/AuthZ
será realizada somente pelo tempo de conexão.
Enquanto a execução de integração associada à rota $connect
é concluída, a solicitação de atualização está pendente e a conexão real não será estabelecida. Se a solicitação $connect
falhar (por exemplo, devido a uma falha AuthN
/AuthZ
ou falha de integração), a conexão não será estabelecida.
nota
Se a autorização falhar em $connect
, a conexão não será estabelecida, e o cliente receberá uma resposta 401
ou 403
.
A configuração de uma integração para $connect
é opcional. Você deve considerar configurar uma integração $connect
se:
-
Deseja permitir que os clientes especifiquem subprotocolos usando o campo
Sec-WebSocket-Protocol
. Para ver um código demonstrativo, consulte Configurar uma rota $connect que requer um subprotocolo de WebSocket. -
Deseja receber notificação quando os clientes se conectarem.
-
Deseja limitar as conexões ou controlar quem se conecta.
-
Deseja que o backend envie mensagens de volta aos clientes usando uma URL de retorno de chamada.
-
Deseja armazenar cada ID de conexão e outras informações em um banco de dados (por exemplo, Amazon DynamoDB).
Transmitir informações de conexão da rota $connect
É possível usar integrações de proxy e não proxy para transmitir informações da rota $connect
para um banco de dados ou outro AWS service (Serviço da AWS).
Como transmitir informações de conexão usando uma integração de proxy
É possível acessar as informações de conexão por uma integração de proxy do Lambda no evento. Use outro AWS service (Serviço da AWS) ou função do AWS Lambda para publicar na conexão.
A função do Lambda a seguir mostra como usar o objeto requestContext
para registrar o ID da conexão, o nome do domínio, o nome do estágio e as strings de consulta.
Como transmitir informações de conexão usando uma integração que não seja de proxy
-
É possível acessar as informações de conexão com uma integração não proxy. Configure a solicitação de integração e forneça um modelo de solicitação da API de WebSocket. O modelo de mapeamento Velocity Template Language (VTL)
a seguir fornece uma solicitação de integração. Essa solicitação envia os seguintes detalhes para uma integração sem proxy: -
ID da conexão
-
Nome de domínio
-
Nome da etapa
-
Path
-
Cabeçalhos
-
Strings de consulta
Essa solicitação envia o ID da conexão, o nome do domínio, o nome do estágio, os caminhos, os cabeçalhos e as strings de consulta para uma integração sem proxy.
{ "connectionId": "$context.connectionId", "domain": "$context.domainName", "stage": "$context.stage", "params": "$input.params()" }
Para obter mais informações sobre a configuração de transformações de dados, consulte Transformações de dados para APIs de WebSocket no API Gateway.
Para concluir a solicitação de integração, defina
StatusCode: 200
para a resposta de integração. Para saber mais sobre como configurar uma resposta de integração, consulte Configurar uma resposta de integração usando o console do API Gateway. -
A rota $disconnect
A rota $disconnect
é executada depois de a conexão ser encerrada.
A conexão pode ser encerrada pelo servidor ou pelo cliente. Como a conexão já está fechada quando é executado, $disconnect
é um evento de melhor esforço. O API Gateway tentará o seu melhor para entregar o evento $disconnect
à sua integração, mas não pode garantir a entrega.
O backend pode iniciar a desconexão ao utilizar a API @connections
. Para ter mais informações, consulte Usar os comandos @connections em seu serviço de backend.