Öğretici: WebSocket API'si ve Azure Web PubSub hizmeti SDK'sını kullanarak iletileri yayımlama ve abone olma
Makale
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.
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<.
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.
İ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
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 => ...)); .
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"
İlk olarak adlı subscriber bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin:
Web PubSub hizmetine bağlanmak için WebSocket API'sini kullanın. Aşağıdaki kodla bir subscribe.js dosya oluşturun:
const WebSocket = require('ws');
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
async function main() {
const hub = "pubsub";
let service = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);
let token = await service.getClientAccessToken();
let ws = new WebSocket(token.url);
ws.on('open', () => console.log('connected'));
ws.on('message', data => console.log('Message received: %s', data));
}
main();
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 => ...)); .
öğesini daha önce kopyaladığınız bağlantı dizesi ile değiştirerek <Web-PubSub-connection-string> aşağıdaki komutu çalıştırın. Windows komut kabuğu kullanıyorsanız yerine kullanabilirsiniz setexport.
Web PubSub hizmetine bağlanmak için WebSocket API'sini kullanın. Aşağıdaki kodla bir subscribe.py dosya oluşturun:
import asyncio
import sys
import websockets
from azure.messaging.webpubsubservice import WebPubSubServiceClient
async def connect(url):
async with websockets.connect(url) as ws:
print('connected')
while True:
print('Received message: ' + await ws.recv())
if __name__ == '__main__':
if len(sys.argv) != 3:
print('Usage: python subscribe.py <connection-string> <hub-name>')
exit(1)
connection_string = sys.argv[1]
hub_name = sys.argv[2]
service = WebPubSubServiceClient.from_connection_string(connection_string, hub=hub_name)
token = service.get_client_access_token()
try:
asyncio.get_event_loop().run_until_complete(connect(token['url']))
except KeyboardInterrupt:
pass
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. Gelen iletileri dinlemek için kullanın await ws.recv() .
öğesini daha önce kopyaladığınız bağlantı dizesi ile değiştirerek <Web-PubSub-connection-string> aşağıdaki komutu çalıştırın:
İlk olarak, bu öğretici için adlı pubsub bir proje dizini oluşturun.
mkdir pubsub
cd pubsub
Dizinin içinde pubsub Maven'ı kullanarak adlı webpubsub-quickstart-subscriberyeni bir konsol uygulaması oluşturun ve webpubsub-quickstart-subscriber dizinine gidin:
Web PubSub'da hizmete bağlanabilir ve WebSocket bağlantıları aracılığıyla iletilere abone olabilirsiniz. WebSocket, hizmetin istemcinize gerçek zamanlı olarak ileti göndermesine olanak sağlayan tam çift yönlü bir iletişim kanalıdır. WebSocket'i destekleyen herhangi bir API veya kitaplığı kullanabilirsiniz. Bu örnek için Java-WebSocket paketini kullanırız.
Düzenle, App.java dosyasının içeriğini aşağıdaki kodla değiştirin:
package com.webpubsub.quickstart;
import com.azure.messaging.webpubsub.*;
import com.azure.messaging.webpubsub.models.*;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
/**
* Connect to Azure Web PubSub service using WebSocket protocol
*/
public class App
{
public static void main( String[] args ) throws IOException, URISyntaxException
{
if (args.length != 2) {
System.out.println("Expecting 2 arguments: <connection-string> <hub-name>");
return;
}
WebPubSubServiceClient service = new WebPubSubServiceClientBuilder()
.connectionString(args[0])
.hub(args[1])
.buildClient();
WebPubSubClientAccessToken token = service.getClientAccessToken(new GetClientAccessTokenOptions());
WebSocketClient webSocketClient = new WebSocketClient(new URI(token.getUrl())) {
@Override
public void onMessage(String message) {
System.out.println(String.format("Message received: %s", message));
}
@Override
public void onClose(int arg0, String arg1, boolean arg2) {
// TODO Auto-generated method stub
}
@Override
public void onError(Exception arg0) {
// TODO Auto-generated method stub
}
@Override
public void onOpen(ServerHandshake arg0) {
// TODO Auto-generated method stub
}
};
webSocketClient.connect();
System.in.read();
}
}
Bu kod, Azure Web PubSub'da bir hub'a bağlı bir WebSocket bağlantısı oluşturur. Hub, Azure Web PubSub'da bir istemci grubuna ileti yayımlayabileceğiniz mantıksal bir birimdir. Temel kavramlar , Azure 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. Gelen iletileri dinlemek için kullanın onMessage(String message) .
Abone uygulamasını başlatmak için webpubsub-quickstart-subscriber dizinine gidin ve aşağıdaki komutu çalıştırın. değerini daha önce kopyaladığınız bağlantı dizesi ile değiştirin<Web-PubSub-connection-string>.
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.
İ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
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.
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"
Abonenin komut kabuğunun şu iletiyi aldığını doğrulayın:
Message received: Hello World
İlk olarak adlı publisher bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin:
Hizmete ileti yayımlamak için Azure Web PubSub SDK'sını kullanın. Aşağıdaki kodla bir publish.js dosya oluşturun:
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
const hub = "pubsub";
let service = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);
// by default it uses `application/json`, specify contentType as `text/plain` if you want plain-text
service.sendToAll(process.argv[2], { contentType: "text/plain" });
Çağrı, service.sendToAll() bir hub'daki tüm bağlı istemcilere yalnızca bir ileti gönderir.
İleti göndermek 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. Windows komut kabuğunu kullanıyorsanız yerine kullanabilirsiniz setexport.
Abonenin iletiyi aldığından önceki komut kabuğunu denetleyin:
Received message: Hello World
Dizine pubsub gidin. Maven kullanarak bir yayımcı konsol uygulaması webpubsub-quickstart-publisher oluşturun ve webpubsub-quickstart-publisher dizinine gidin:
Azure Web PubSub SDK'sını kullanarak hizmete bir ileti yayımlayın. /src/main/java/com/webpubsub/quickstart dizinine gidin, düzenleyicinizde App.java dosyasını açın ve içeriği aşağıdaki kodla değiştirin:
package com.webpubsub.quickstart;
import com.azure.messaging.webpubsub.*;
import com.azure.messaging.webpubsub.models.*;
/**
* Publish messages using Azure Web PubSub service SDK
*
*/
public class App
{
public static void main( String[] args )
{
if (args.length != 3) {
System.out.println("Expecting 3 arguments: <connection-string> <hub-name> <message>");
return;
}
WebPubSubServiceClient service = new WebPubSubServiceClientBuilder()
.connectionString(args[0])
.hub(args[1])
.buildClient();
service.sendToAll(args[2], WebPubSubContentType.TEXT_PLAIN);
}
}
Çağrı, sendToAll() bir hub'daki tüm bağlı istemcilere bir ileti gönderir.
İleti göndermek için webpubsub-quickstart-publisher dizinine gidin ve aşağıdaki komutu kullanarak projeyi çalıştırın. öğesini <Web-PubSub-connection-string> daha önce kopyaladığınız bağlantı dizesi değiştirin.
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.