Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln beskriver hur du använder Socket.IO serverlös integrering med Azure Functions.
| Åtgärd | Bindningstyp |
|---|---|
| Get client negotiate result including url and access token | Indatabindning |
| Utlöses av meddelanden från tjänsten | Utlösarbindning |
| Anropa tjänsten för att skicka meddelanden eller hantera klienter | Utdatabindning |
Referensdokumentation | för källkodspaketets | API-referens Produktdokumentation | – exempel |
Viktigt!
Azure-funktionsbindningar kan bara integreras med Web PubSub för Socket.IO i serverlöst läge.
Autentisera och anslutningssträng
För att tillägget ska fungera med Web PubSub för Socket.IO måste du ange antingen åtkomstnycklar eller identitetsbaserad konfiguration för att autentisera med tjänsten.
Åtkomstnyckelbaserad konfiguration
| Konfigurationsnamn | beskrivning |
|---|---|
| WebPubSubForSocketIOConnectionString | Obligatoriskt. Nyckelbaserad anslutningssträng till tjänsten |
Du hittar anslutningssträng i bladet Nycklar i webbpubenSub för Socket.IO i Azure Portal.
För den lokala utvecklingen använder du local.settings.json filen för att lagra anslutningssträng. Ange WebPubSubForSocketIOConnectionString till den anslutningssträng kopierade från föregående steg:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
`WebPubSubForSocketIOConnectionString`: "Endpoint=https://<webpubsub-name>.webpubsub.azure.com;AccessKey=<access-key>;Version=1.0;"
}
}
När du distribuerar använder du programinställningarna för att ange anslutningssträng.
Identitetsbaserad konfiguration
| Konfigurationsnamn | beskrivning |
|---|---|
| WebPubSubForSocketIOConnectionString__endpoint | Obligatoriskt. Tjänstens slutpunkt. Till exempel: https://mysocketio.webpubsub.azure.com |
| WebPubSubForSocketIOConnectionString__credential | Definierar hur en token ska hämtas för anslutningen. Den här inställningen ska anges till managedidentity om din distribuerade Azure-funktion avser att använda hanterad identitetsautentisering. Det här värdet är endast giltigt när en hanterad identitet är tillgänglig i värdmiljön. |
| WebPubSubForSocketIOConnectionString__clientId | När credential är inställt på managedidentitykan den här egenskapen anges för att ange den användartilldelade identitet som ska användas när du hämtar en token. Egenskapen accepterar ett klient-ID som motsvarar en användartilldelad identitet som tilldelats programmet. Om det inte anges används den systemtilldelade identiteten. |
Funktionsbindningen följer de vanliga egenskaperna för identitetsbaserad konfiguration. Mer obemärkta egenskaper finns i Vanliga egenskaper för identitetsbaserade anslutningar.
För den lokala utvecklingen använder du local.settings.json filen för att lagra anslutningssträng. Ange WebPubSubForSocketIOConnectionString till den anslutningssträng kopierade från föregående steg:
{
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"WebPubSubForSocketIOConnectionString__endpoint": "https://<webpubsub-name>.webpubsub.azure.com",
"WebPubSubForSocketIOConnectionString__tenant": "<tenant id you're in>",
}
}
Om du vill använda identitetsbaserad konfiguration och köra online AzureWebJobsStorage bör du läsa Ansluta till värdlagring med en identitet.
Indatabindning
Socket.IO Indatabindning genererar en SocketIONegotiationResult till klientförhandlingsbegäran. När en Socket.IO-klient försöker ansluta till tjänsten måste den endpointkänna till , pathoch access token för autentisering. Det är vanligt att ha en server för att generera dessa data, vilket kallas förhandling.
[FunctionName("SocketIONegotiate")]
public static IActionResult Negotiate(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req,
[SocketIONegotiation(Hub = "hub", UserId = "userId")] SocketIONegotiationResult result)
{
return new OkObjectResult(result);
}
Attribut
Attributet för indatabindning är [SocketIONegotiation].
| Attributegenskap | beskrivning |
|---|---|
| Hubb | Hubbnamnet som en klient behöver ansluta till. |
| Connection | Namnet på appinställningen som innehåller Socket.IO anslutningssträng (standardvärdet är WebPubSubForSocketIOConnectionString). |
| AnvändarID | UserId för anslutningen. Det gäller för alla socketar i anslutningen. Det blir anspråket sub i den genererade token. |
Utlösarbindning
Azure Function använder utlösarbindning för att utlösa en funktion för att bearbeta händelserna från Web PubSub för Socket.IO.
Utlösarbindning exponerar en specifik sökväg följt av Azure Function-slutpunkten. Url:en ska anges som URL-mall för tjänsten (Portal: inställningar –> händelsehanterare –> URL-mall). I slutpunktsmönstret krävsfrågedelen code=<API_KEY> när du använder Azure-funktionsappen av säkerhetsskäl. Nyckeln finns i Azure Portal. Leta reda på funktionsappens resurs och gå till Functions ->App keys ->System keys ->socketio_extension när du har distribuerat funktionsappen till Azure. Den här nyckeln behövs dock inte när du arbetar med lokala funktioner.
<Function_App_Endpoint>/runtime/webhooks/socketio?code=<API_KEY>
Funktionsutlösare för socket connect-händelse.
[FunctionName("SocketIOTriggerConnect")]
public static async Task<SocketIOEventHandlerResponse> Connect(
[SocketIOTrigger("hub", "connect")] SocketIOConnectRequest request)
{
return new SocketIOConnectResponse();
}
Funktionsutlösare för socketansluten händelse.
[FunctionName("SocketIOTriggerConnected")]
public static async Task Connected(
[SocketIOTrigger("hub", "connected")] SocketIOConnectedRequest request)
{
}
Funktionsutlösare för socket-frånkopplingshändelse.
[FunctionName("SocketIOTriggerDisconnected")]
public static async Task Disconnected(
[SocketIOTrigger("hub", "disconnected")] SocketIODisconnectedRequest request)
{
}
Funktionsutlösare för normala meddelanden från klienter.
[FunctionName("SocketIOTriggerMessage")]
public static async Task NewMessage(
[SocketIOTrigger("hub", "new message")] SocketIOMessageRequest request,
[SocketIOParameter] string arg)
{
}
Attribut
Attributet för utlösarbindning är [SocketIOTrigger].
Bindningsdata
[SocketIOTrigger] binder vissa variabler till bindningsdata. Du kan lära dig mer om det från mönster för Bindningsuttryck i Azure Functions
SocketIOAttribute
SocketIOAttribute är ett alternativ till ParameterNames, vilket förenklar funktionsdefinitionen. Följande två definitioner har till exempel samma effekt:
[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)
{
}
Observera att ParameterNames och [SocketIOParameter] inte kan användas tillsammans.
Begäran om indatabindning
Datastrukturen för indatabindningsargument varierar beroende på meddelandetyp.
Anslut
{
"namespace": "",
"socketId": "",
"claims": {
"<claim-type>": [ "<claim-value>" ]
},
"query": {
"<query-key>": [ "<query-value>" ]
},
"headers":{
"<header-name>": [ "<header-value>" ]
},
"clientCertificates":{
{
"thumbprint": "",
"content": ""
}
}
}
| Property | beskrivning |
|---|---|
| namnområde | Socketens namnområde. |
| socketId | Socketens unika identitet. |
| anspråk | Anspråket för JWT för klientanslutningen. Observera att det inte är JWT när tjänsten begär funktionen, utan JWT när Engine.IO-klienten ansluter till tjänsten. |
| query | Frågan om klientanslutningen. Observera att det inte är frågan när tjänsten begär funktionen, utan frågan när Engine.IO-klienten ansluter till tjänsten. |
| rubriker | Sidhuvudena för klientanslutningen. Observera att det inte är rubrikerna när tjänsten begär funktionen, utan rubrikerna när Engine.IO-klienten ansluter till tjänsten. |
| clientCertificates | Klientcertifikatet om det är aktiverat |
Connected
{
"namespace": "",
"socketId": "",
}
| Property | beskrivning |
|---|---|
| namnområde | Socketens namnområde. |
| socketId | Socketens unika identitet. |
Frånkopplad
{
"namespace": "",
"socketId": "",
"reason": ""
}
| Property | beskrivning |
|---|---|
| namnområde | Socketens namnområde. |
| socketId | Socketens unika identitet. |
| orsak | Beskrivning av orsaken till anslutningens stängning. |
Normala händelser
{
"namespace": "",
"socketId": "",
"payload": "",
"eventName": "",
"parameters": []
}
| Property | beskrivning |
|---|---|
| namnområde | Socketens namnområde. |
| socketId | Socketens unika identitet. |
| payload | Meddelandets nyttolast i Engine.IO protokoll |
| eventName | Begärans händelsenamn. |
| parametrar | Lista över parametrar för meddelandet. |
Utdatabindning
Utdatabindningen stöder för närvarande följande funktioner:
- Lägg till en socket i rummet
- Ta bort en socket från rummet
- Skicka meddelanden till en socket
- Skicka meddelanden till ett rum
- Skicka meddelanden till ett namnområde
- Koppla från 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
Attributet för indatabindning är [SocketIO].
| Attributegenskap | beskrivning |
|---|---|
| Hubb | Hubbnamnet som en klient behöver ansluta till. |
| Connection | Namnet på appinställningen som innehåller Socket.IO anslutningssträng (standardvärdet är WebPubSubForSocketIOConnectionString). |
Åtgärder
Utdatabindning använder åtgärder för att utföra åtgärder. För närvarande stöder vi följande åtgärder:
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
}