Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
}