Socket.IO azure-funktionsutlösare och bindning (förhandsversion)

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].

Attributegenskap beskrivning
Hubb Hubbnamnet som en klient behöver ansluta till.
Namnområde Socketens namnområde. Standard: "/"
EventName Händelsenamnet som funktionen utlöser för. Vissa händelsenamn är fördefinierade: connect för socket connect-händelse. connected för socketansluten händelse. disconnected för socket frånkopplad händelse. Och andra händelser definieras av användaren och måste matcha händelsenamnet som skickas av klientsidan.
ParameterNames Parameternamnets lista över händelsen. Listans längd bör vara konsekvent med händelsen som skickas från klienten. Och namnet använder bindningsuttrycken och åtkomsten av funktionsparametern med samma namn.

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
}