Aracılığıyla paylaş


Azure İşlevi tetikleyicisini ve bağlamayı Socket.IO (Önizleme)

Bu makalede, Azure İşlevleri ile sunucusuz tümleştirme Socket.IO nasıl kullanılacağı açıklanmaktadır.

Eylem Bağlama Türü
URL ve erişim belirteci de dahil olmak üzere istemci anlaşma sonucunu alma Giriş bağlaması
Hizmetten gelen iletiler tarafından tetiklenen Tetikleyici bağlaması
İleti göndermek veya istemcileri yönetmek için hizmeti çağırma Çıkış bağlaması

Kaynak kodu | Paket | API'si başvuru belgeleri | Ürün belgeleri Örnekleri |

Önemli

Azure İşlev bağlamaları yalnızca Sunucusuz Modda Socket.IO için Web PubSub ile tümleşebilir.

Kimlik Doğrulaması ve Bağlantı Dizesi

Uzantının Socket.IO için Web PubSub ile çalışmasına izin vermek için, hizmette kimlik doğrulaması yapmak için erişim anahtarları veya kimlik tabanlı yapılandırma sağlamanız gerekir.

Erişim anahtarı tabanlı yapılandırma

Yapılandırma Adı Açıklama
WebPubSubForSocketIOConnectionString Gerekli. Hizmete yönelik anahtar tabanlı bağlantı dizesi

bağlantı dizesi, Azure portalında Socket.IO için Web PubSub'nizin Anahtarlar dikey penceresinde bulabilirsiniz.

Yerel geliştirme için dosyasını kullanarak bağlantı dizesi depolayınlocal.settings.json. Önceki adımdan kopyalanan bağlantı dizesi ayarlayınWebPubSubForSocketIOConnectionString:

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

Dağıtıldığında, bağlantı dizesi ayarlamak için uygulama ayarlarını kullanın.

Kimlik tabanlı yapılandırma

Yapılandırma Adı Açıklama
WebPubSubForSocketIOConnectionString__endpoint Gerekli. Hizmetin Uç Noktası. Örneğin https://mysocketio.webpubsub.azure.com
WebPubSubForSocketIOConnectionString__credential Bağlantı için bir belirtecin nasıl alınması gerektiğini tanımlar. Dağıtılan Azure İşleviniz yönetilen kimlik kimlik doğrulamasını kullanmayı planlıyorsa bu ayar olarak ayarlanmalıdır managedidentity . Bu değer yalnızca barındırma ortamında yönetilen kimlik kullanılabilir olduğunda geçerlidir.
WebPubSubForSocketIOConnectionString__clientId credential olarak ayarlandığındamanagedidentity, bu özellik belirteç alınırken kullanılacak kullanıcı tarafından atanan kimliği belirtmek üzere ayarlanabilir. özelliği, uygulamaya atanan kullanıcı tarafından atanan kimliğe karşılık gelen bir istemci kimliğini kabul eder. Belirtilmezse, sistem tarafından atanan kimlik kullanılır.

İşlev bağlaması, kimlik tabanlı yapılandırma için ortak özellikleri izler. Daha fazla bağımsız özellik için bkz . Kimlik tabanlı bağlantılar için ortak özellikler.

Yerel geliştirme için dosyasını kullanarak bağlantı dizesi depolayınlocal.settings.json. Önceki adımdan kopyalanan bağlantı dizesi ayarlayınWebPubSubForSocketIOConnectionString:

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

Kimlik tabanlı yapılandırmayı kullanmak ve çevrimiçi çalışmak istiyorsanız, AzureWebJobsStorage kimlikle konak depolamaya bağlanma bölümüne bakın.

Giriş Bağlaması

Socket.IO Giriş bağlaması, istemci anlaşması isteğine bir SocketIONegotiationResult oluşturur. bir Socket.IO istemcisi hizmete bağlanmaya çalıştığında, kimlik doğrulaması için , pathve'yi access token bilmesi endpointgerekir. Bu verileri oluşturmak için bir sunucuya sahip olmak yaygın bir uygulamadır ve buna anlaşma adı verilir.

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

Öznitelik

Giriş bağlama özniteliğidir [SocketIONegotiation].

Öznitelik özelliği Açıklama
Hub İstemcinin bağlanması gereken hub adı.
Connection Socket.IO bağlantı dizesi içeren uygulama ayarının adı (varsayılan olarak WebPubSubForSocketIOConnectionString).
Kullanıcı Kimliği Bağlantının userId değeri. Bağlantıdaki tüm yuvalar için geçerlidir. Oluşturulan belirteçteki sub talep olur.

Tetikleyici Bağlaması

Azure İşlevi, Socket.IO için Web PubSub'dan olayları işlemek üzere bir işlevi tetikleyen tetikleyici bağlamasını kullanır.

Tetikleyici bağlaması, Azure İşlevi uç noktasını izleyen belirli bir yolu kullanıma sunar. URL, hizmetin URL Şablonu olarak ayarlanmalıdır (Portal: ayarlar -> olay işleyicisi -> URL Şablonu). Uç nokta düzeninde, güvenlik nedeniyle Azure İşlev Uygulaması'nı kullanırken sorgu bölümü code=<API_KEY> GEREKLİ olur. Anahtar Azure portalında bulunabilir. İşlev uygulaması kaynağınızı bulun ve işlev uygulamasını Azure'a dağıttığınızda İşlevler ->Uygulama anahtarları ->Sistem anahtarları ->socketio_extension gidin. Ancak, yerel işlevlerle çalışırken bu anahtar gerekli değildir.

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

Yuva bağlantısı olayı için işlev tetikleyicileri.

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

Yuvaya bağlı olay için işlev tetikleyicileri.

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

Yuva bağlantısı kesme olayı için işlev tetikleyicileri.

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

İstemcilerden normal iletiler için işlev tetikleyicileri.

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

Özellikler

Tetikleyici bağlama özniteliğidir [SocketIOTrigger].

Öznitelik özelliği Açıklama
Hub İstemcinin bağlanması gereken hub adı.
Ad Alanı Yuvanın ad alanı. Varsayılan: "/"
EventName İşlevin tetiklediğini olay adı. Bazı olay adları önceden tanımlanmıştır: connect yuva bağlantısı olayı için. connected yuvaya bağlı olay için. disconnected yuva bağlantısı kesilmiş olay için. Ayrıca diğer olaylar kullanıcı tarafından tanımlanır ve istemci tarafından gönderilen olay adıyla eşleşmesi gerekir.
ParameterNames Olayın parametre adı listesi. Listenin uzunluğu istemciden gönderilen olayla tutarlı olmalıdır. Ad, Bağlama ifadelerini kullanır ve aynı ad işlev parametresine göre erişim sağlar.

Veri Bağlama

[SocketIOTrigger] bazı değişkenleri bağlama verilerine bağlar. Bağlama ifade desenlerinden Azure İşlevleri hakkında daha fazla bilgi edinebilirsiniz

SocketIOAttribute

SocketIOAttribute , işlev tanımını basitleştiren bir alternatiftir ParameterNames. Örneğin, aşağıdaki iki tanım aynı etkiye sahiptir:

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

ve [SocketIOParameter] değerlerinin ParameterNames birlikte kullanılamadığını unutmayın.

Giriş Bağlama İsteği

Giriş bağlama bağımsız değişkenlerinin veri yapısı ileti türüne bağlı olarak değişir.

Bağlan

{
    "namespace": "",
    "socketId": "",
    "claims": {
        "<claim-type>": [ "<claim-value>" ]
    },
    "query": {
        "<query-key>": [ "<query-value>" ]
    },
    "headers":{
        "<header-name>": [ "<header-value>" ]
    },
    "clientCertificates":{
        {
            "thumbprint": "",
            "content": ""
        }
    }
}
Özellik Açıklama
ad alanı Yuvanın ad alanı.
socketId Yuvanın benzersiz kimliği.
talepler İstemci bağlantısının JWT talebi. Hizmet işlevi istediğinde JWT değil, Engine.IO istemcisi hizmete bağlandığında JWT olduğunu unutmayın.
query İstemci bağlantısının sorgusu. Hizmet işlevi istediğinde sorgu değil, Engine.IO istemcisi hizmete bağlandığında sorgu olduğunu unutmayın.
üst bilgiler İstemci bağlantısının üst bilgileri. Hizmet işlevi istediğinde üst bilgiler değil, Engine.IO istemcisi hizmete bağlandığında üst bilgiler olduğunu unutmayın.
clientCertificates Etkinleştirildiyse istemci sertifikası

Bağlandı

{
    "namespace": "",
    "socketId": "",
}
Özellik Açıklama
ad alanı Yuvanın ad alanı.
socketId Yuvanın benzersiz kimliği.

Bağlantı kesildi

{
    "namespace": "",
    "socketId": "",
    "reason": ""
}
Özellik Açıklama
ad alanı Yuvanın ad alanı.
socketId Yuvanın benzersiz kimliği.
reason Bağlantı kapatma nedeni açıklaması.

Normal olaylar

{
    "namespace": "",
    "socketId": "",
    "payload": "",
    "eventName": "",
    "parameters": []
}
Özellik Açıklama
ad alanı Yuvanın ad alanı.
socketId Yuvanın benzersiz kimliği.
yük Engine.IO protokolündeki ileti yükü
eventName İsteğin olay adı.
parametreler İletinin parametrelerinin listesi.

Çıkış Bağlaması

Çıkış bağlaması şu anda aşağıdaki işlevleri destekler:

  • Odaya yuva ekleme
  • Odadan yuvayı kaldırma
  • Yuvaya ileti gönderme
  • Odaya ileti gönderme
  • Ad alanına ileti gönderme
  • Yuvaların bağlantısını kesme
[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" }));
}

Öznitelik

Giriş bağlama özniteliğidir [SocketIO].

Öznitelik özelliği Açıklama
Hub İstemcinin bağlanması gereken hub adı.
Connection Socket.IO bağlantı dizesi içeren uygulama ayarının adı (varsayılan olarak WebPubSubForSocketIOConnectionString).

Eylemler

Çıkış bağlama işlemleri gerçekleştirmek için eylemleri kullanır. Şu anda aşağıdaki eylemleri destekliyoruz:

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
}