Udostępnij za pomocą


Socket.IO wyzwalacz i powiązanie funkcji platformy Azure (wersja zapoznawcza)

W tym artykule wyjaśniono, jak używać Socket.IO integracji bezserwerowej z usługą Azure Functions.

Akcja Typ powiązania
Uzyskiwanie wyniku negocjowania klienta, w tym adresu URL i tokenu dostępu Powiązanie wejściowe
Wyzwalane przez komunikaty z usługi Powiązanie wyzwalacza
Wywoływanie usługi w celu wysyłania komunikatów lub zarządzania klientami Powiązanie wyjściowe

Dokumentacja interfejsu API | pakietu | źródłowego | — dokumentacja | produktu — przykłady

Ważne

Powiązania funkcji platformy Azure można zintegrować tylko z usługą Web PubSub dla Socket.IO w trybie bezserwerowym.

Uwierzytelnianie i parametry połączenia

Aby umożliwić rozszerzenie pracy z usługą Web PubSub dla Socket.IO, należy podać klucze dostępu lub konfigurację opartą na tożsamości, aby uwierzytelnić się w usłudze.

Konfiguracja oparta na kluczach dostępu

Nazwa konfiguracji opis
WebPubSubForSocketIOConnectionString Wymagany. Parametry połączenia oparte na kluczach w usłudze

Parametry połączenia można znaleźć w bloku Klucze w witrynie Web PubSub dla Socket.IO w witrynie Azure Portal.

W przypadku programowania lokalnego local.settings.json użyj pliku do przechowywania parametry połączenia. Ustaw WebPubSubForSocketIOConnectionString wartość parametry połączenia skopiowaną z poprzedniego kroku:

{
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    `WebPubSubForSocketIOConnectionString`: "Endpoint=https://<webpubsub-name>.webpubsub.azure.com;AccessKey=<access-key>;Version=1.0;"
  }
}

Po wdrożeniu użyj ustawień aplikacji, aby ustawić parametry połączenia.

Konfiguracja oparta na tożsamościach

Nazwa konfiguracji opis
WebPubSubForSocketIOConnectionString__endpoint Wymagany. Punkt końcowy usługi. Na przykład https://mysocketio.webpubsub.azure.com
WebPubSubForSocketIOConnectionString__credential Definiuje sposób uzyskiwania tokenu dla połączenia. To ustawienie powinno być ustawione na managedidentity wartość , jeśli wdrożona funkcja platformy Azure zamierza używać uwierzytelniania tożsamości zarządzanej. Ta wartość jest prawidłowa tylko wtedy, gdy tożsamość zarządzana jest dostępna w środowisku hostingu.
WebPubSubForSocketIOConnectionString__clientId Gdy credential jest ustawiona managedidentitywartość , tę właściwość można ustawić, aby określić tożsamość przypisaną przez użytkownika do użycia podczas uzyskiwania tokenu. Właściwość akceptuje identyfikator klienta odpowiadający tożsamości przypisanej przez użytkownika do aplikacji. Jeśli nie zostanie określona, zostanie użyta tożsamość przypisana przez system.

Powiązanie funkcji jest zgodne z typowymi właściwościami konfiguracji opartej na tożsamościach. Zobacz Typowe właściwości połączeń opartych na tożsamościach, aby uzyskać więcej właściwości, o których mowa.

W przypadku programowania lokalnego local.settings.json użyj pliku do przechowywania parametry połączenia. Ustaw WebPubSubForSocketIOConnectionString wartość parametry połączenia skopiowaną z poprzedniego kroku:

{
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "WebPubSubForSocketIOConnectionString__endpoint": "https://<webpubsub-name>.webpubsub.azure.com",
    "WebPubSubForSocketIOConnectionString__tenant": "<tenant id you're in>",
  }
}

Jeśli chcesz używać konfiguracji opartej na tożsamościach i uruchamiać ją w trybie online, AzureWebJobsStorage zapoznaj się z artykułem Łączenie z magazynem hostów z tożsamością.

Powiązanie wejściowe

Socket.IO powiązanie wejściowe generuje SocketIONegotiationResult element do żądania negocjacji klienta. Gdy klient Socket.IO próbuje nawiązać połączenie z usługą, musi znać endpointelement , pathi access token na potrzeby uwierzytelniania. Typowym rozwiązaniem jest utworzenie serwera w celu wygenerowania tych danych, nazywanego negocjacjami.

[FunctionName("SocketIONegotiate")]
public static IActionResult Negotiate(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req,
    [SocketIONegotiation(Hub = "hub", UserId = "userId")] SocketIONegotiationResult result)
{
    return new OkObjectResult(result);
}

Atrybut

Atrybut powiązania wejściowego to [SocketIONegotiation].

Właściwość atrybutu opis
Piasta Nazwa centrum, z którą klient musi nawiązać połączenie.
Connection Nazwa ustawienia aplikacji, które zawiera Socket.IO parametry połączenia (wartość domyślna to WebPubSubForSocketIOConnectionString).
Identyfikator użytkownika UserId połączenia. Dotyczy wszystkich gniazd w połączeniu. Staje się oświadczeniem sub w wygenerowanych tokenach.

Powiązanie wyzwalacza

Funkcja platformy Azure używa powiązania wyzwalacza, aby wyzwolić funkcję w celu przetworzenia zdarzeń z usługi Web PubSub dla Socket.IO.

Powiązanie wyzwalacza uwidacznia określoną ścieżkę po punkcie końcowym funkcji platformy Azure. Adres URL powinien być ustawiony jako szablon adresu URL usługi (portal: ustawienia —> procedura obsługi zdarzeń —> szablon adresu URL). We wzorcu punktu końcowego część code=<API_KEY> zapytania jest wymagana , gdy używasz aplikacji funkcji platformy Azure ze względów bezpieczeństwa . Klucz można znaleźć w witrynie Azure Portal. Znajdź zasób aplikacji funkcji i przejdź do pozycji Funkcje -Klucze aplikacji ->>Klucze systemowe ->socketio_extension po wdrożeniu aplikacji funkcji na platformie Azure. Jednak ten klucz nie jest potrzebny podczas pracy z funkcjami lokalnymi.

<Function_App_Endpoint>/runtime/webhooks/socketio?code=<API_KEY>

Wyzwalacze funkcji dla zdarzenia połączenia gniazda.

[FunctionName("SocketIOTriggerConnect")]
public static async Task<SocketIOEventHandlerResponse> Connect(
    [SocketIOTrigger("hub", "connect")] SocketIOConnectRequest request)
{
    return new SocketIOConnectResponse();
}

Wyzwalacze funkcji dla zdarzenia połączonego z gniazdem.

[FunctionName("SocketIOTriggerConnected")]
public static async Task Connected(
    [SocketIOTrigger("hub", "connected")] SocketIOConnectedRequest request)
{
}

Wyzwalacze funkcji dla zdarzenia rozłączenia gniazda.

[FunctionName("SocketIOTriggerDisconnected")]
public static async Task Disconnected(
    [SocketIOTrigger("hub", "disconnected")] SocketIODisconnectedRequest request)
{
}

Wyzwalacze funkcji dla normalnych komunikatów od klientów.

[FunctionName("SocketIOTriggerMessage")]
public static async Task NewMessage(
    [SocketIOTrigger("hub", "new message")] SocketIOMessageRequest request,
    [SocketIOParameter] string arg)
{
}

Atrybuty

Atrybut powiązania wyzwalacza to [SocketIOTrigger].

Właściwość atrybutu opis
Piasta Nazwa centrum, z którą klient musi nawiązać połączenie.
Przestrzeń nazw Przestrzeń nazw gniazda. Ustawienie domyślne: "/"
EventName Nazwa zdarzenia wyzwalana przez funkcję. Niektóre nazwy zdarzeń są wstępnie zdefiniowane: connect dla zdarzenia połączenia gniazda. connected dla zdarzenia połączonego gniazda. disconnected dla zdarzenia odłączonego gniazda. Inne zdarzenia są definiowane przez użytkownika i muszą być zgodne z nazwą zdarzenia wysyłanego przez klienta.
Nazwa parametrów Lista nazw parametrów zdarzenia. Długość listy powinna być zgodna ze zdarzeniem wysyłanym z klienta. Nazwa używa wyrażeń powiązania i dostępu za pomocą parametru funkcji o tej samej nazwie.

Wiązanie danych

[SocketIOTrigger] wiąże niektóre zmienne z danymi powiązania. Aby dowiedzieć się więcej na ten temat, zobacz Wzorce wyrażeń powiązań usługi Azure Functions

SocketIOAttribute

SocketIOAttribute jest alternatywą funkcji ParameterNames, która upraszcza definicję funkcji. Na przykład następujące dwie definicje mają taki sam efekt:

[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)
{
}

Należy pamiętać, że ParameterNames i [SocketIOParameter] nie można ich używać razem.

Żądanie powiązania wejściowego

Struktura danych argumentów powiązania wejściowego różni się w zależności od typu komunikatu.

Połącz

{
    "namespace": "",
    "socketId": "",
    "claims": {
        "<claim-type>": [ "<claim-value>" ]
    },
    "query": {
        "<query-key>": [ "<query-value>" ]
    },
    "headers":{
        "<header-name>": [ "<header-value>" ]
    },
    "clientCertificates":{
        {
            "thumbprint": "",
            "content": ""
        }
    }
}
Właściwości opis
namespace Przestrzeń nazw gniazda.
socketId Unikatowa tożsamość gniazda.
oświadczenia Oświadczenie JWT połączenia klienta. Pamiętaj, że nie jest to JWT, gdy usługa żąda funkcji, ale JWT, gdy klient Engine.IO łączy się z usługą.
zapytanie Zapytanie dotyczące połączenia klienta. Uwaga: nie jest to zapytanie, gdy usługa żąda funkcji, ale zapytanie, gdy klient Engine.IO łączy się z usługą.
nagłówki Nagłówki połączenia klienta. Pamiętaj, że nie jest to nagłówki, gdy usługa żąda funkcji, ale nagłówki, gdy klient Engine.IO łączy się z usługą.
clientCertificates Certyfikat klienta, jeśli jest włączony

Połączono

{
    "namespace": "",
    "socketId": "",
}
Właściwości opis
namespace Przestrzeń nazw gniazda.
socketId Unikatowa tożsamość gniazda.

Odłączony

{
    "namespace": "",
    "socketId": "",
    "reason": ""
}
Właściwości opis
namespace Przestrzeń nazw gniazda.
socketId Unikatowa tożsamość gniazda.
reason Opis przyczyny zamknięcia połączenia.

Zdarzenia normalne

{
    "namespace": "",
    "socketId": "",
    "payload": "",
    "eventName": "",
    "parameters": []
}
Właściwości opis
namespace Przestrzeń nazw gniazda.
socketId Unikatowa tożsamość gniazda.
payload Ładunek komunikatu w protokole Engine.IO
eventName Nazwa zdarzenia żądania.
parameters Lista parametrów komunikatu.

Powiązanie wyjściowe

Powiązanie wyjściowe obsługuje obecnie następujące funkcje:

  • Dodawanie gniazda do pokoju
  • Usuwanie gniazda z pokoju
  • Wysyłanie komunikatów do gniazda
  • Wysyłanie wiadomości do pokoju
  • Wysyłanie komunikatów do przestrzeni nazw
  • Odłącz gniazda
[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" }));
}

Atrybut

Atrybut powiązania wejściowego to [SocketIO].

Właściwość atrybutu opis
Piasta Nazwa centrum, z którą klient musi nawiązać połączenie.
Connection Nazwa ustawienia aplikacji, które zawiera Socket.IO parametry połączenia (wartość domyślna to WebPubSubForSocketIOConnectionString).

Akcje

Powiązanie wyjściowe używa akcji do wykonywania operacji. Obecnie obsługujemy następujące akcje:

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
}