Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo explica como usar Socket.IO integração sem servidor com o Azure Functions.
| Ação | Tipo de Enlace |
|---|---|
| Obter resultado de negociação do cliente, incluindo url e token de acesso | Vinculação de entrada |
| Acionado por mensagens do serviço | Vinculação de gatilho |
| Invoque o serviço para enviar mensagens ou gerenciar clientes | Vinculação de saída |
Código-fonte Documentação de referência | da API do pacote | Documentação | do produto Exemplos |
Importante
As associações de Função do Azure só podem ser integradas com o Web PubSub para Socket.IO no Modo Sem Servidor.
Autenticar e Cadeia de Conexão
Para permitir que a extensão funcione com o Web PubSub para Socket.IO, você precisa fornecer chaves de acesso ou configuração baseada em identidade para autenticar com o serviço.
Configuração baseada em chave de acesso
| Nome da Configuração | Description |
|---|---|
| WebPubSubForSocketIOConnectionString | Obrigatório. Cadeia de conexão baseada em chave para o serviço |
Você pode encontrar a cadeia de conexão na folha Chaves em seu Web PubSub para Socket.IO no portal do Azure.
Para o desenvolvimento local, use o local.settings.json arquivo para armazenar a cadeia de conexão. Defina WebPubSubForSocketIOConnectionString como a cadeia de conexão copiada da etapa anterior:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
`WebPubSubForSocketIOConnectionString`: "Endpoint=https://<webpubsub-name>.webpubsub.azure.com;AccessKey=<access-key>;Version=1.0;"
}
}
Quando implantado, use as configurações do aplicativo para definir a cadeia de conexão.
Configuração baseada em identidade
| Nome da Configuração | Description |
|---|---|
| WebPubSubForSocketIOConnectionString__endpoint | Obrigatório. O ponto de extremidade do serviço. Por exemplo, https://mysocketio.webpubsub.azure.com |
| WebPubSubForSocketIOConnectionString__credential | Define como um token deve ser obtido para a conexão. Essa configuração deve ser definida como managedidentity se sua Função do Azure implantada pretende usar a autenticação de identidade gerenciada. Esse valor só é válido quando uma identidade gerenciada está disponível no ambiente de hospedagem. |
| WebPubSubForSocketIOConnectionString__clientId | Quando credential é definido como managedidentity, essa propriedade pode ser definida para especificar a identidade atribuída pelo usuário a ser usada ao obter um token. A propriedade aceita um ID de cliente correspondente a uma identidade atribuída pelo usuário atribuída ao aplicativo. Se não for especificado, a identidade atribuída ao sistema será usada. |
A ligação de função segue as propriedades comuns para a configuração baseada em identidade. Consulte Propriedades comuns para conexões baseadas em identidade para obter mais propriedades não mencionadas.
Para o desenvolvimento local, use o local.settings.json arquivo para armazenar a cadeia de conexão. Defina WebPubSubForSocketIOConnectionString como a cadeia de conexão copiada da etapa anterior:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"WebPubSubForSocketIOConnectionString__endpoint": "https://<webpubsub-name>.webpubsub.azure.com",
"WebPubSubForSocketIOConnectionString__tenant": "<tenant id you're in>",
}
}
Se você quiser usar a configuração baseada em identidade e executar online, consulte AzureWebJobsStorageConectando-se ao armazenamento do host com uma identidade.
Enlace de Entrada
Socket.IO A vinculação de entrada gera uma SocketIONegotiationResult solicitação de negociação para o cliente. Quando um cliente Socket.IO tenta se conectar ao serviço, ele precisa saber o endpoint, pathe access token para autenticação. É uma prática comum ter um servidor para gerar esses dados, o que é chamado de negociação.
[FunctionName("SocketIONegotiate")]
public static IActionResult Negotiate(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req,
[SocketIONegotiation(Hub = "hub", UserId = "userId")] SocketIONegotiationResult result)
{
return new OkObjectResult(result);
}
Atributo
O atributo para vinculação de entrada é [SocketIONegotiation].
| Propriedade Attribute | Description |
|---|---|
| Hub | O nome do hub ao qual um cliente precisa se conectar. |
| Connection | O nome da configuração do aplicativo que contém a cadeia de conexão Socket.IO (o padrão é ).WebPubSubForSocketIOConnectionString |
| UserId | O userId da conexão. Ele se aplica a todos os soquetes na conexão. Torna-se a sub declaração no token gerado. |
Vinculação de gatilho
O Azure Function usa a associação de gatilho para disparar uma função para processar os eventos do Web PubSub para Socket.IO.
A associação de gatilho expõe um caminho específico seguido do ponto de extremidade da Função do Azure. O url deve ser definido como o modelo de URL do serviço (Portal: configurações -> manipulador de eventos -> Modelo de URL). No padrão de ponto de extremidade, a parte code=<API_KEY> de consulta é NECESSÁRIA quando você estiver usando o Aplicativo de Função do Azure por motivos de segurança . A chave pode ser encontrada no portal do Azure. Encontre seu recurso de aplicativo de função e navegue até Funções ->Chaves de aplicativo ->Chaves do sistema ->socketio_extension depois de implantar o aplicativo de função no Azure. No entanto, essa chave não é necessária quando você está trabalhando com funções locais.
<Function_App_Endpoint>/runtime/webhooks/socketio?code=<API_KEY>
Gatilhos de função para o evento de conexão de soquete.
[FunctionName("SocketIOTriggerConnect")]
public static async Task<SocketIOEventHandlerResponse> Connect(
[SocketIOTrigger("hub", "connect")] SocketIOConnectRequest request)
{
return new SocketIOConnectResponse();
}
Gatilhos de função para evento conectado ao soquete.
[FunctionName("SocketIOTriggerConnected")]
public static async Task Connected(
[SocketIOTrigger("hub", "connected")] SocketIOConnectedRequest request)
{
}
Gatilhos de função para o evento de desconexão do soquete.
[FunctionName("SocketIOTriggerDisconnected")]
public static async Task Disconnected(
[SocketIOTrigger("hub", "disconnected")] SocketIODisconnectedRequest request)
{
}
Gatilhos de função para mensagens normais de clientes.
[FunctionName("SocketIOTriggerMessage")]
public static async Task NewMessage(
[SocketIOTrigger("hub", "new message")] SocketIOMessageRequest request,
[SocketIOParameter] string arg)
{
}
Atributos
O atributo para ligação de gatilho é [SocketIOTrigger].
| Propriedade Attribute | Description |
|---|---|
| Hub | O nome do hub ao qual um cliente precisa se conectar. |
| Espaço de Nomes | O namespace do soquete. Padrão: "/" |
| EventName | O nome do evento para o qual a função é acionada. Alguns nomes de eventos são predefinidos: connect para o evento socket connect.
connected para evento conectado ao soquete.
disconnected para evento de desconexão de soquete. E outros eventos são definidos pelo usuário e precisam corresponder ao nome do evento enviado pelo lado do cliente. |
| Nomes de parâmetros | A lista de nomes de parâmetros do evento. O tamanho da lista deve ser consistente com o evento enviado pelo cliente. E o nome usa as expressões Binding e o acesso pelo parâmetro de função do mesmo nome. |
Vinculação de dados
[SocketIOTrigger] Vincula algumas variáveis à vinculação de dados. Você pode saber mais sobre isso em Padrões de expressão de vinculação do Azure Functions
SocketIOAttribute
SocketIOAttribute é uma alternativa de , que simplifica a definição da ParameterNamesfunção. Por exemplo, as duas definições seguintes têm o mesmo efeito:
[FunctionName("SocketIOTriggerMessage")]
public static async Task NewMessage(
[SocketIOTrigger("hub", "new message")] SocketIOMessageRequest request,
[SocketIOParameter] string arg)
{
}
[FunctionName("SocketIOTriggerMessage")]
public static async Task NewMessage(
[SocketIOTrigger("hub", "new message", ParameterNames = new[] {"arg"})] SocketIOMessageRequest request,
string arg)
{
}
Observe isso ParameterNames e [SocketIOParameter] não pode ser usado em conjunto.
Pedido de Vinculação de Entrada
A estrutura de dados dos argumentos de vinculação de entrada varia dependendo do tipo de mensagem.
Ligar
{
"namespace": "",
"socketId": "",
"claims": {
"<claim-type>": [ "<claim-value>" ]
},
"query": {
"<query-key>": [ "<query-value>" ]
},
"headers":{
"<header-name>": [ "<header-value>" ]
},
"clientCertificates":{
{
"thumbprint": "",
"content": ""
}
}
}
| Property | Description |
|---|---|
| espaço de nomes | O namespace do soquete. |
| socketId | A identidade única do soquete. |
| afirmações | A reivindicação de JWT da conexão do cliente. Observe que não é o JWT quando o serviço solicita a função, mas o JWT quando o cliente Engine.IO se conecta ao serviço. |
| query | A consulta da conexão do cliente. Observe que não é a consulta quando o serviço solicita a função, mas a consulta quando o cliente Engine.IO se conecta ao serviço. |
| cabeçalhos | Os cabeçalhos da conexão do cliente. Observe que não são os cabeçalhos quando o serviço solicita a função, mas os cabeçalhos quando o cliente Engine.IO se conecta ao serviço. |
| clientCertificados | O certificado do cliente, se estiver habilitado |
Ligado
{
"namespace": "",
"socketId": "",
}
| Property | Description |
|---|---|
| espaço de nomes | O namespace do soquete. |
| socketId | A identidade única do soquete. |
Desligado
{
"namespace": "",
"socketId": "",
"reason": ""
}
| Property | Description |
|---|---|
| espaço de nomes | O namespace do soquete. |
| socketId | A identidade única do soquete. |
| reason | A descrição do motivo de fechamento da conexão. |
Acontecimentos normais
{
"namespace": "",
"socketId": "",
"payload": "",
"eventName": "",
"parameters": []
}
| Property | Description |
|---|---|
| espaço de nomes | O namespace do soquete. |
| socketId | A identidade única do soquete. |
| payload | A carga útil da mensagem no protocolo Engine.IO |
| eventName | O nome do evento da solicitação. |
| parâmetros | Lista de parâmetros da mensagem. |
Enlace de Saída
A vinculação de saída atualmente suporta a seguinte funcionalidade:
- Adicionar uma tomada à sala
- Remover uma tomada da sala
- Enviar mensagens para um soquete
- Enviar mensagens para uma sala
- Enviar mensagens para um namespace
- Desconectar soquetes
[FunctionName("SocketIOOutput")]
public static async Task<IActionResult> SocketIOOutput(
[SocketIOTrigger("hub", "new message")] SocketIOMessageRequest request,
[SocketIO(Hub = "hub")] IAsyncCollector<SocketIOAction> collector)
{
await collector.AddAsync(SocketIOAction.CreateSendToNamespaceAction("new message", new[] { "arguments" }));
}
Atributo
O atributo para vinculação de entrada é [SocketIO].
| Propriedade Attribute | Description |
|---|---|
| Hub | O nome do hub ao qual um cliente precisa se conectar. |
| Connection | O nome da configuração do aplicativo que contém a cadeia de conexão Socket.IO (o padrão é ).WebPubSubForSocketIOConnectionString |
Ações
A vinculação de saída usa ações para executar operações. Atualmente, apoiamos as seguintes ações:
AddSocketToRoomAction
{
"type": "AddSocketToRoom",
"socketId": "",
"room": ""
}
RemoveSocketFromRoomAction
{
"type": "RemoveSocketFromRoom",
"socketId": "",
"room": ""
}
SendToNamespaceAction
{
"type": "SendToNamespace",
"eventName": "",
"parameters": [],
"exceptRooms": []
}
SendToRoomsAção
{
"type": "SendToRoom",
"eventName": "",
"parameters": [],
"rooms": [],
"exceptRooms": []
}
SendToSocketAction
{
"type": "SendToSocket",
"eventName": "",
"parameters": [],
"socketId": ""
}
DisconnectSocketsAction
{
"type": "DisconnectSockets",
"rooms": [],
"closeUnderlyingConnection": false
}