Öğretici: WebSocket API'si ve Azure Web PubSub hizmeti SDK'sını kullanarak iletileri yayımlama ve abone olma

Azure Web PubSub hizmeti, gerçek zamanlı web mesajlaşması uygulamalarını kolayca oluşturmanıza yardımcı olur. Bu öğreticide, WebSocket API'sini kullanarak hizmete abone olmayı ve Web PubSub hizmet SDK'sını kullanarak iletileri yayımlamayı öğreneceksiniz.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Web PubSub hizmet örneği oluşturma
  • WebSocket bağlantısını kurmak için tam URL'yi oluşturma
  • Standart WebSocket protokolunu kullanarak ileti almak için bir Web PubSub abone istemcisi oluşturma
  • Web PubSub hizmet SDK'sını kullanarak iletileri yayımlamak için Bir Web PubSub yayımcı istemcisi oluşturma

Önkoşullar

  • Bir Azure aboneliği, ücretsiz bir hesap oluşturun.
  • Bash komut kabuğu. Azure Cloud Shell'de yerel kabuk veya Bash ortamı kullanın.
  • Yerel makinenizde çalışıyorsa Azure CLI'yi yükleyin.

Bu öğreticideki komutları çalıştırmak için Bash kabuğu yerine Windows cmd.exe komut kabuğunu kullanabilirsiniz.

Projeyi yerel bir makinede oluşturuyorsanız, kullandığınız dil için bağımlılıkları yüklemeniz gerekir:

Ortamınızı hazırlama

Yerel geliştirme için Azure CLI kurulumu

Azure CLI'yı ve proje ortamınızı ayarlamak için bu adımları izleyin.

  1. Bir komut kabuğu açın.

  2. Azure CLI'nın en son sürümüne yükseltin.

    az upgrade
    
  3. Web PubSub için Azure CLI uzantısını yükleyin.

    az extension add --name webpubsub
    
  4. Azure CLI'da oturum açın. İstemlerin ardından Azure kimlik bilgilerinizi girin.

    az login
    

Kaynak grubu oluşturma

Kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği bir mantıksal kapsayıcıdır. konumunda adlı myResourceGroup eastus bir kaynak grubu oluşturmak için az group create komutunu kullanın.

az group create --name myResourceGroup --location EastUS

1. Azure Web PubSub örneği oluşturma

Web PubSub örneği oluşturma

Oluşturduğunuz kaynak grubunda bir Web PubSub örneği oluşturmak için Azure CLI az webpubsub create komutunu kullanın. Aşağıdaki komut, içinde EastUSkaynak grubu myResourceGroup altında bir Ücretsiz Web PubSub kaynağı oluşturur:

Her Web PubSub kaynağının benzersiz bir adı olmalıdır. Aşağıdaki komutta unique-resource-name> değerini Web PubSub örneğinizin adıyla değiştirin<.

az webpubsub create --resource-group myResourceGroup --name <your-unique-resource-name> --location EastUS --sku Free_F1

Bu komutun çıktısı yeni oluşturulan kaynağın özelliklerini gösterir. Aşağıdaki ipleri not alın:

  • name: Yukarıdaki parametrede --name sağladığınız Web PubSub adı.
  • hostName: Örnekte ana bilgisayar adı şeklindedir <your-unique-resource-name>.webpubsub.azure.com/.

Bu noktada, azure hesabınız bu yeni kaynak üzerinde herhangi bir işlem gerçekleştirme yetkisi olan tek hesaptır.

Bağlantı dizesini alma

Önemli

bağlantı dizesi, uygulamanızın Azure Web PubSub hizmetine erişmesi için gereken yetkilendirme bilgilerini içerir. bağlantı dizesi içindeki erişim anahtarı, hizmetinizin kök parolasına benzer. Üretim ortamlarında erişim anahtarlarınızı korumak için her zaman dikkatli olun. Anahtarlarınızı güvenli bir şekilde yönetmek ve döndürmek için Azure Key Vault'ı kullanın. Erişim anahtarlarını diğer kullanıcılara dağıtmaktan, sabit kodlamaktan veya başkalarının erişebileceği herhangi bir yerde düz metin olarak kaydetmekten kaçının. Ele geçirilmiş olabileceklerini düşünüyorsanız anahtarlarınızı döndürün.

Hizmetin ConnectionString'ini almak için Azure CLI az webpubsub key komutunu kullanın. Yer tutucuyu <your-unique-resource-name> Azure Web PubSub örneğinizin adıyla değiştirin.

az webpubsub key show --resource-group myResourceGroup --name <your-unique-resource-name> --query primaryConnectionString --output tsv

Daha sonra kullanmak üzere bağlantı dizesi kopyalayın.

Abone istemcisi oluşturma

İstemciler, JSON Web Belirteci (JWT) kimlik doğrulamasını kullanarak standart WebSocket protokolü aracılığıyla Azure Web PubSub hizmetine bağlanır. Hizmet SDK'sı, belirteci oluşturmak için yardımcı yöntemler sağlar. Bu öğreticide abone, belirteci connectionString'den doğrudan oluşturur. Gerçek uygulamalarda, sunucu tarafı uygulama genellikle kimlik doğrulama/yetkilendirme iş akışını işler. İş akışını daha iyi anlamak için Sohbet uygulaması oluşturma öğreticisine bakın.

  1. İlk olarak, bu proje için adlı subscriber bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin:

    • Websocket.Client paketi, WebSocket bağlantılarını destekleyen bir üçüncü taraf paketidir. WebSocket'i destekleyen herhangi bir API/kitaplık kullanabilirsiniz.
    • SDK paketi Azure.Messaging.WebPubSub JWT belirtecinin oluşturulmasına yardımcı olur.
    mkdir subscriber
    cd subscriber
    dotnet new console
    dotnet add package Websocket.Client --version 4.3.30
    dotnet add package Azure.Messaging.WebPubSub --version 1.0.0
    
  2. içindeki Program.cs kodu hizmete bağlanan aşağıdaki kodla değiştirin:

    using System;
    using System.Threading.Tasks;
    
    using Azure.Messaging.WebPubSub;
    
    using Websocket.Client;
    
    namespace subscriber
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                if (args.Length != 2)
                {
                    Console.WriteLine("Usage: subscriber <connectionString> <hub>");
                    return;
                }
                var connectionString = args[0];
                var hub = args[1];
    
                // Either generate the URL or fetch it from server or fetch a temp one from the portal
                var serviceClient = new WebPubSubServiceClient(connectionString, hub);
                var url = serviceClient.GetClientAccessUri();
    
                using (var client = new WebsocketClient(url))
                {
                    // Disable the auto disconnect and reconnect because the sample would like the client to stay online even no data comes in
                    client.ReconnectTimeout = null;
                    client.MessageReceived.Subscribe(msg => Console.WriteLine($"Message received: {msg}"));
                    await client.Start();
                    Console.WriteLine("Connected.");
                    Console.Read();
                }
            }
        }
    }
    
    

    Kod, Web PubSub'daki bir hub'a bağlı bir WebSocket bağlantısı oluşturur. Hub, Web PubSub'da bir istemci grubuna ileti yayımlayabileceğiniz mantıksal bir birimdir. Temel kavramlar , Web PubSub'da kullanılan terimler hakkında ayrıntılı açıklamayı içerir.

    Web PubSub hizmeti JSON Web Belirteci (JWT) kimlik doğrulamasını kullanır. Örnek kod, geçerli bir erişim belirteci ile tam URL'yi içeren hizmetin URL'sini oluşturmak için Web PubSub SDK'sında kullanır WebPubSubServiceClient.GetClientAccessUri() .

    Bağlantı kurulduktan sonra, istemciniz WebSocket bağlantısı üzerinden iletiler alır. İstemci, gelen iletileri dinlemek için kullanır client.MessageReceived.Subscribe(msg => ...)); .

  3. Aboneyi başlatmak için aşağıdaki komutu çalıştırın ve <Web-PubSub-connection-string> yerine daha önce kopyaladığınız bağlantı dizesi yazın:

    dotnet run <Web-PubSub-connection-string> "myHub1"
    

2. Hizmet SDK'sı kullanarak iletileri yayımlama

Bağlı istemciye ileti yayımlamak için Azure Web PubSub SDK'sını kullanarak bir yayımcı oluşturun. Bu proje için başka bir komut kabuğu açmanız gerekir.

  1. İlk olarak adlı publisher bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin:

    mkdir publisher
    cd publisher
    dotnet new console
    dotnet add package Azure.Messaging.WebPubSub
    
  2. sınıfını Program.cs kullanmak WebPubSubServiceClient ve istemcilere ileti göndermek için dosyasını güncelleştirin.

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.WebPubSub;
    
    namespace publisher
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                if (args.Length != 3) {
                    Console.WriteLine("Usage: publisher <connectionString> <hub> <message>");
                    return;
                }
                var connectionString = args[0];
                var hub = args[1];
                var message = args[2];
    
                // Either generate the token or fetch it from server or fetch a temp one from the portal
                var serviceClient = new WebPubSubServiceClient(connectionString, hub);
                await serviceClient.SendToAllAsync(message);
            }
        }
    }
    
    

    Çağrı, hub'daki SendToAllAsync() tüm bağlı istemcilere bir ileti gönderir.

  3. Aşağıdaki komutu çalıştırarak bir ileti gönderin. değerini daha önce kopyaladığınız bağlantı dizesi ile değiştirin<Web-PubSub-connection-string>.

    dotnet run <Web-PubSub-connection-string> "myHub1" "Hello World"
    
  4. Abonenin komut kabuğunun şu iletiyi aldığını doğrulayın:

    Message received: Hello World
    

Temizleme

Bu hızlı başlangıçta oluşturduğunuz kaynakları, bunları içeren kaynak grubunu silerek silebilirsiniz.

az group delete --name myResourceGroup --yes

Azure Cloud Shell'i kullanmaya devam etmek istemiyorsanız, ilişkili depolama hesabını içeren kaynak grubunu silerek maliyetlerin birikmesi önlenebilir. Kaynak grubu olarak adlandırılır cloud-shell-storage-<your-region>. öğesini Cloud Shell grup adıyla değiştirerek <CloudShellResourceGroup> aşağıdaki komutu çalıştırın.

az group delete --name <CloudShellResourceGroup> --yes

Dikkat

Kaynak gruplarının silinmesi, bu öğreticinin kapsamı dışında oluşturulan kaynaklar da dahil olmak üzere tüm kaynakları siler.

Sonraki adımlar

Bu öğretici, Web PubSub hizmetine bağlanma ve bağlı istemcilere ileti yayımlama hakkında temel bir fikir sağlar.

Hizmetin nasıl kullanılacağı hakkında daha fazla bilgi edinmek için diğer öğreticileri gözden geçirin.