Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment utiliser Socket.IO intégration serverless à Azure Functions.
| Action | Type de liaison |
|---|---|
| Obtenir le résultat de négociation du client, y compris l’URL et le jeton d’accès | Liaison d’entrée |
| Déclenché par des messages du service | Liaison de déclencheur |
| Appeler le service pour envoyer des messages ou gérer des clients | Liaison de sortie |
Code source | Package | Documentation de référence de l’API | Documentation du produit | Exemples
Important
Les liaisons de fonction Azure peuvent uniquement s’intégrer à Web PubSub pour Socket.IO en mode serverless.
Authentifier et connecter une chaîne
Pour permettre à l’extension de fonctionner avec Web PubSub pour Socket.IO, vous devez fournir des clés d’accès ou une configuration basée sur l’identité pour s’authentifier auprès du service.
Configuration basée sur les clés d’accès
| Nom de la configuration | Description |
|---|---|
| WebPubSubForSocketIOConnectionString | Obligatoire. Chaîne de connexion basée sur des clés au service |
Vous trouverez la chaîne de connexion dans le panneau Clés dans web PubSub pour Socket.IO dans le portail Azure.
Pour le développement local, utilisez le fichier local.settings.json pour stocker la chaîne de connexion. Définissez WebPubSubForSocketIOConnectionString à la chaîne de connexion copiée à l’étape précédente :
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
`WebPubSubForSocketIOConnectionString`: "Endpoint=https://<webpubsub-name>.webpubsub.azure.com;AccessKey=<access-key>;Version=1.0;"
}
}
Lors du déploiement, utilisez les paramètres de l’application pour définir la chaîne de connexion.
Configuration basée sur l’identité
| Nom de la configuration | Description |
|---|---|
| WebPubSubForSocketIOConnectionString__endpoint | Obligatoire. Point de terminaison du service. Par exemple, https://mysocketio.webpubsub.azure.com |
| WebPubSubForSocketIOConnectionString__credential | Définit la façon dont un jeton doit être obtenu pour la connexion. Ce paramètre doit être défini sur managedidentity si votre fonction Azure déployée utilise l’authentification de l’identité managée. Cette valeur n’est valide que lorsqu’une identité managée est disponible dans l’environnement d’hébergement. |
| WebPubSubForSocketIOConnectionString__clientId | Lorsque credential a pour valeur managedidentity, cette propriété permet de spécifier l’identité attribuée par l’utilisateur qui doit être utilisée pour obtenir un jeton. La propriété accepte un ID client correspondant à une identité attribuée par l’utilisateur affectée à l’application. Par défaut, l’identité affectée par le système est utilisée. |
La liaison de fonction suit les propriétés courantes de la configuration basée sur l’identité. Consultez les propriétés courantes pour les connexions basées sur des identités pour obtenir plus de propriétés non mentionées.
Pour le développement local, utilisez le fichier local.settings.json pour stocker la chaîne de connexion. Définissez WebPubSubForSocketIOConnectionString à la chaîne de connexion copiée à l’étape précédente :
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"WebPubSubForSocketIOConnectionString__endpoint": "https://<webpubsub-name>.webpubsub.azure.com",
"WebPubSubForSocketIOConnectionString__tenant": "<tenant id you're in>",
}
}
Si vous souhaitez utiliser la configuration basée sur l’identité et s’exécuter en ligne, AzureWebJobsStorage devrait se référer à la connexion au stockage hôte avec une identité.
Liaison d’entrée
Socket.IO liaison d’entrée génère une requête SocketIONegotiationResult de négociation du client. Lorsqu’un client Socket.IO tente de se connecter au service, il doit connaître le endpoint, path et access token pour l’authentification. Il est courant de disposer d’un serveur pour générer ces données, appelées négociation.
[FunctionName("SocketIONegotiate")]
public static IActionResult Negotiate(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req,
[SocketIONegotiation(Hub = "hub", UserId = "userId")] SocketIONegotiationResult result)
{
return new OkObjectResult(result);
}
Attribut
L’attribut de la liaison d’entrée est [SocketIONegotiation].
| Propriété d’attribut | Description |
|---|---|
| Hub | Nom du hub auquel un client doit se connecter. |
| Connexion | Nom du paramètre d’application qui contient la chaîne de connexion Socket.IO (valeur par défaut WebPubSubForSocketIOConnectionString). |
| UserId | userId de la connexion. Elle s’applique à tous les sockets de la connexion. Il devient la revendication sub dans le jeton généré. |
Liaison de déclencheur
Azure Function utilise la liaison de déclencheur pour déclencher une fonction pour traiter les événements à partir de Web PubSub pour Socket.IO.
La liaison de déclencheur expose un chemin spécifique suivi du point de terminaison de fonction Azure. L’URL doit être définie comme modèle d’URL du service (Portail : paramètres -> gestionnaire d’événements -> Modèle d’URL). Dans le modèle de point de terminaison, la partie requête code=<API_KEY> est OBLIGATOIRE lorsque vous utilisez Azure Function App pour des raisons de sécurité. La clé est accessible dans le portail Azure. Localisez votre ressource d’application de fonction et accédez à Functions ->App keys ->System keys ->socketio_extension après avoir déployé l’application de fonction sur Azure. Toutefois, cette clé n’est pas nécessaire lorsque vous utilisez des fonctions locales.
<Function_App_Endpoint>/runtime/webhooks/socketio?code=<API_KEY>
Déclencheurs de fonction pour l’événement socket connect.
[FunctionName("SocketIOTriggerConnect")]
public static async Task<SocketIOEventHandlerResponse> Connect(
[SocketIOTrigger("hub", "connect")] SocketIOConnectRequest request)
{
return new SocketIOConnectResponse();
}
Déclencheurs de fonction pour l’événement connecté au socket.
[FunctionName("SocketIOTriggerConnected")]
public static async Task Connected(
[SocketIOTrigger("hub", "connected")] SocketIOConnectedRequest request)
{
}
Déclencheurs de fonction pour l’événement de déconnexion de socket.
[FunctionName("SocketIOTriggerDisconnected")]
public static async Task Disconnected(
[SocketIOTrigger("hub", "disconnected")] SocketIODisconnectedRequest request)
{
}
Déclencheurs de fonction pour les messages normaux des clients.
[FunctionName("SocketIOTriggerMessage")]
public static async Task NewMessage(
[SocketIOTrigger("hub", "new message")] SocketIOMessageRequest request,
[SocketIOParameter] string arg)
{
}
Attributs
L’attribut de la liaison de déclencheur est [SocketIOTrigger].
| Propriété d’attribut | Description |
|---|---|
| Hub | Nom du hub auquel un client doit se connecter. |
| Espace de noms | L’espace de noms du socket. Par défaut: « / » |
| EventName | Nom de l’événement pour lequel la fonction se déclenche. Certains noms d’événements sont prédéfinis : connect pour l’événement socket connect.
connected pour l’événement connecté au socket.
disconnected pour l’événement déconnecté de socket. D’autres événements sont définis par l’utilisateur et doivent correspondre au nom de l’événement envoyé par le côté client. |
| ParameterNames | Liste des noms de paramètre de l’événement. La longueur de la liste doit être cohérente avec l’événement envoyé par le client. Et le nom utilise les expressions de liaison et l’accès par le paramètre de fonction de même nom. |
Lier des données
[SocketIOTrigger] lie certaines variables à des données de liaison. Vous pouvez en savoir plus sur celui-ci à partir de modèles d’expression de liaison Azure Functions
SocketIOAttribute
SocketIOAttribute est une alternative de ParameterNames, qui simplifie la définition de la fonction. Par exemple, les deux définitions suivantes ont le même effet :
[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)
{
}
Notez que ParameterNames et [SocketIOParameter] ne peuvent pas être utilisés ensemble.
Requête de liaison d’entrée
La structure des données des arguments de liaison d’entrée varie en fonction du type de message.
Connexion
{
"namespace": "",
"socketId": "",
"claims": {
"<claim-type>": [ "<claim-value>" ]
},
"query": {
"<query-key>": [ "<query-value>" ]
},
"headers":{
"<header-name>": [ "<header-value>" ]
},
"clientCertificates":{
{
"thumbprint": "",
"content": ""
}
}
}
| Propriété | Description |
|---|---|
| espace de noms | L’espace de noms du socket. |
| socketId | Identité unique du socket. |
| réclamations | Revendication de JWT de la connexion cliente. Notez que ce n’est pas le JWT lorsque le service demande la fonction, mais le JWT lorsque le client Engine.IO se connecte au service. |
| query | Requête de la connexion cliente. Notez que ce n’est pas la requête lorsque le service demande la fonction, mais la requête lorsque le client Engine.IO se connecte au service. |
| headers | Les en-têtes de la connexion cliente. Notez que ce ne sont pas les en-têtes lorsque le service demande la fonction, mais les en-têtes lorsque le client Engine.IO se connecte au service. |
| clientCertificates | Certificat client, s’il est activé |
Connecté
{
"namespace": "",
"socketId": "",
}
| Propriété | Description |
|---|---|
| espace de noms | L’espace de noms du socket. |
| socketId | Identité unique du socket. |
Déconnecté
{
"namespace": "",
"socketId": "",
"reason": ""
}
| Propriété | Description |
|---|---|
| espace de noms | L’espace de noms du socket. |
| socketId | Identité unique du socket. |
| reason | Description de la raison de fermeture de la connexion. |
Événements normaux
{
"namespace": "",
"socketId": "",
"payload": "",
"eventName": "",
"parameters": []
}
| Propriété | Description |
|---|---|
| espace de noms | L’espace de noms du socket. |
| socketId | Identité unique du socket. |
| payload | Charge utile du message dans le protocole Engine.IO |
| eventName | Nom de l’événement de la requête. |
| parameters | Liste des paramètres du message. |
Liaison de sortie
La liaison de sortie prend actuellement en charge les fonctionnalités suivantes :
- Ajouter un socket à la salle
- Supprimer un socket de la salle
- Envoyer des messages à une session
- Envoyer des messages à un groupe
- Envoyer des messages à un espace de noms
- Déconnecter les sockets
[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" }));
}
Attribut
L’attribut de la liaison d’entrée est [SocketIO].
| Propriété d’attribut | Description |
|---|---|
| Hub | Nom du hub auquel un client doit se connecter. |
| Connexion | Nom du paramètre d’application qui contient la chaîne de connexion Socket.IO (valeur par défaut WebPubSubForSocketIOConnectionString). |
Actions
La liaison de sortie utilise des actions pour effectuer des opérations. Actuellement, nous prenons en charge les actions suivantes :
AddSocketToRoomAction
{
"type": "AddSocketToRoom",
"socketId": "",
"room": ""
}
RemoveSocketFromRoomAction
{
"type": "RemoveSocketFromRoom",
"socketId": "",
"room": ""
}
SendToNamespaceAction
{
"type": "SendToNamespace",
"eventName": "",
"parameters": [],
"exceptRooms": []
}
SendToRoomsAction
{
"type": "SendToRoom",
"eventName": "",
"parameters": [],
"rooms": [],
"exceptRooms": []
}
SendToSocketAction
{
"type": "SendToSocket",
"eventName": "",
"parameters": [],
"socketId": ""
}
DisconnectSocketsAction
{
"type": "DisconnectSockets",
"rooms": [],
"closeUnderlyingConnection": false
}