Tanıdık HTTP isteği/yanıt modeli, kullanımı kolay ve ölçeklenebilir olacak şekilde tasarlanmıştır. Ancak günümüzde son kullanıcılar web'den başlangıçta tasarlandığından çok daha fazlasını talep ediyor. HTTP protokolü, kullanıcıların yanıt almak için isteği başlatmasını gerektirir. Ancak geliştiricilerin, istemeden sunucudan istemcilere veri göndermenin bir yoluna ihtiyacı vardır; başka bir deyişle, bir müzayede sitesinde bir ürünün en son teklif fiyatını gönderme veya finansal bir uygulamada hızlı hareket eden hisse senedi fiyatları gibi verileri müşterilere "göndermeleri" gerekir.
Bu hızlı başlangıç kılavuzunda nasıl yapılır gösterilmektedir
uygulama sunucusundan iletilere abone olma
bir uygulama sunucusundan tüm bağlı istemcilere veri gönderme
Önemli
Ham bağlantı dizesi yalnızca tanıtım amacıyla bu makalede görünür.
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ı her zaman koruyun. Anahtarlarınızı güvenli bir şekilde yönetmek ve döndürmek ve bağlantınızın WebPubSubServiceClientgüvenliğini sağlamak 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.
Uygulama sunucunuzdan, istemcinizden, tarayıcıdan, mobil uygulamadan veya IoT cihazından gönderilen iletilere abone olmak için önce Web PubSub kaynağınıza bağlanması ve uygun ileti olayını dinlemesi gerekir.
adlı subscriber bir proje dizini oluşturma ve gerekli bağımlılıkları yükleme
mkdir subscriber
cd subscriber
npm init -y
# The client SDK is available as a module on NPM
npm install @azure/web-pubsub-client
Web PubSub kaynağınıza bağlanın ve olay için server-message bir dinleyici kaydedin
İstemci, kaynağınıza bağlanmak ve kaynağınızla kimlik doğrulaması yapmak için bir İstemci Erişim URL'si kullanır.
Bu URL, desenini izler wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. İstemcinin İstemci Erişimi URL'sini almak için birkaç yolu olabilir. Bu hızlı başlangıç için aşağıdaki diyagramda gösterilen Azure portalından kopyalayıp yapıştırabilirsiniz. Kodunuzdaki İstemci Erişimi URL'sini sabit kodla kodlamayın. Üretim dünyasında genellikle bu URL'yi isteğe bağlı olarak döndürmek için bir uygulama sunucusu ayarlarız.
İstemci Erişimi URL'si Oluşturma, uygulamayı ayrıntılı olarak açıklar.
Yukarıdaki diyagramda gösterildiği gibi, istemci adlı myHub1hub'ı birleştirir.
subscriber Proje klasöründe aşağıdaki kodla adlı subscribe.js bir dosya oluşturun
const { WebPubSubClient } = require("@azure/web-pubsub-client");
// Instantiates the client object
// <client-access-url> is copied from Azure portal mentioned above
const client = new WebPubSubClient("<client-access-url>")
// Registers a handler for the "server-message" event
client.on("server-message", (e) => {
console.log(`Received message ${e.message.data}`)
});
// Before a client can receive a message,
// you must invoke start() on the client object.
client.start();
Programı çalıştırma
node subscribe.js
Şimdi bu istemci Web PubSub kaynağınızla bir bağlantı kurar ve uygulama sunucunuzdan gönderilen iletileri almaya hazırdır.
adlı subscriber bir proje dizini oluşturma ve gerekli bağımlılıkları yükleme
mkdir subscriber
cd subscriber
# Create a .net console app
dotnet new console
# Add the client SDK
dotnet add package Azure.Messaging.WebPubSub.Client --prerelease
Web PubSub kaynağınıza bağlanın ve olay için ServerMessageReceived bir dinleyici kaydedin
İstemci, kaynağınıza bağlanmak ve kaynağınızla kimlik doğrulaması yapmak için bir İstemci Erişim URL'si kullanır.
Bu URL, desenini izler wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>. İstemcinin İstemci Erişimi URL'sini almak için birkaç yolu olabilir. Bu hızlı başlangıç için aşağıdaki diyagramda gösterilen Azure portalından kopyalayıp yapıştırabilirsiniz. Kodunuzdaki İstemci Erişimi URL'sini sabit kodla kodlamayın. Üretim dünyasında genellikle bu URL'yi isteğe bağlı olarak döndürmek için bir uygulama sunucusu ayarlarız.
İstemci Erişimi URL'si Oluşturma, uygulamayı ayrıntılı olarak açıklar.
Yukarıdaki diyagramda gösterildiği gibi, istemci adlı myHub1hub'ı birleştirir.
içindeki Program.cs kodu aşağıdaki kodla değiştirin
using Azure.Messaging.WebPubSub.Clients;
// Instantiates the client object
// <client-access-uri> is copied from Azure portal mentioned above
var client = new WebPubSubClient(new Uri("<client-access-uri>"));
client.ServerMessageReceived += eventArgs =>
{
Console.WriteLine($"Receive message: {eventArgs.Message.Data}");
return Task.CompletedTask;
};
client.Connected += eventArgs =>
{
Console.WriteLine("Connected");
return Task.CompletedTask;
};
await client.StartAsync();
// This keeps the subscriber active until the user closes the stream by pressing Ctrl+C
var streaming = Console.ReadLine();
while (streaming != null)
{
if (!string.IsNullOrEmpty(streaming))
{
await client.SendToGroupAsync("stream", BinaryData.FromString(streaming + Environment.NewLine), WebPubSubDataType.Text);
}
streaming = Console.ReadLine();
}
await client.StopAsync();
Aşağıdaki komutu çalıştırın
dotnet run
Şimdi bu istemci Web PubSub kaynağınızla bir bağlantı kurar ve uygulama sunucunuzdan gönderilen iletileri almaya hazırdır.
adlı subscriber bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin:
Web PubSub kaynağınıza 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() .
Aşağıdaki komutu çalıştırın
python subscribe.py $connection_string "myHub1"
adlı bir proje dizini oluşturma pubsub
mkdir pubsub
cd pubsub
Maven kullanarak adlı webpubsub-quickstart-subscriberyeni bir konsol uygulaması oluşturun: ;
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) .
Artık Web PubSub kaynağınıza bağlı bir istemciniz olduğuna göre, Web PubSub tarafından sağlanan sunucu SDK'sını kullanarak istediğiniz zaman bir uygulama sunucusundan ileti gönderebilirsiniz.
adlı publisher yeni bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin
mkdir publisher
cd publisher
npm init
# This command installs the server SDK from NPM,
# which is different from the client SDK you used in subscribe.js
npm install --save @azure/web-pubsub
Aşağıdaki kodla bir publish.js dosya oluşturun
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
// This is the hub name we used on Azure portal when generating the Client Access URL.
// It ensures this server can push messages to clients in the hub named "myHub1".
const hub = "myHub1";
let server = new WebPubSubServiceClient(process.env.WebPubSubConnectionString, hub);
// By default, the content type is `application/json`.
// Specify contentType as `text/plain` for this demo.
server.sendToAll(process.argv[2], { contentType: "text/plain" });
Çağrı, server.sendToAll() bir hub'daki tüm bağlı istemcilere bir ileti gönderir.
Bağlantı dizesini alma
Önemli
bağlantı dizesi, uygulamanızın 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.
Bu hızlı başlangıç kılavuzu için aşağıda gösterildiği gibi Azure portalından alacağız.
Sunucu programını çalıştırma
Aşağıdaki komutları yeni bir komut kabuğunda çalıştırın.
Ham bağlantı dizesi yalnızca tanıtım amacıyla bu makalede görünür. Üretim ortamlarında erişim anahtarlarınızı her zaman koruyun. Anahtarlarınızı güvenli bir şekilde yönetmek ve döndürmek ve bağlantınızın WebPubSubServiceClientgüvenliğini sağlamak için Azure Key Vault kullanın.
# Set the environment variable for your connection string.
export WebPubSubConnectionString="<Put your connection string here>"
node publish.js "Hello World"
İstemci tarafında alınan iletileri gözlemleme
İstemcilerden daha fazlasını uyarmak için aynı "abone ol" programını birden çok komut kabuğunda çalıştırmayı deneyin. "Yayımla" programı çalıştırılır çalıştırılmaz iletilerin tüm bu istemcilere gerçek zamanlı olarak teslim edildiğini görmeniz gerekir.
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
Program.cs Dosyasını aşağıdaki kodla değiş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ı, SendToAllAsync() hub'daki tüm bağlı istemcilere bir ileti gönderir.
Tüm bağlı istemcilere ileti göndermek için sunucu programını çalıştırın
$connection_string="<connection-string>"
dotnet run $connection_string "myHub1" "Hello World"
İstemci tarafında alınan iletileri gözlemleme
# On the command shell used for running the "subscribe" program, you should see the received the messaged logged there.
# Try running the same "subscribe" program in multiple command shells, which simulates more than clients.
# Try running the "publish" program several times and you see messages being delivered in real-time to all these clients.
Message received: Hello World
İlk olarak adlı publisher bir proje dizini oluşturun ve gerekli bağımlılıkları yükleyin:
mkdir publisher
cd publisher
# Create venv
python -m venv env
# Active venv
source ./env/bin/activate
pip install azure-messaging-webpubsubservice
Azure Web PubSub SDK'sını kullanarak hizmete bir ileti yayımlayın. Aşağıdaki kodla bir publish.py dosya oluşturun:
import sys
from azure.messaging.webpubsubservice import WebPubSubServiceClient
if __name__ == '__main__':
if len(sys.argv) != 4:
print('Usage: python publish.py <connection-string> <hub-name> <message>')
exit(1)
connection_string = sys.argv[1]
hub_name = sys.argv[2]
message = sys.argv[3]
service = WebPubSubServiceClient.from_connection_string(connection_string, hub=hub_name)
res = service.send_to_all(message, content_type='text/plain')
print(res)
, send_to_all() iletiyi bir hub'daki tüm bağlı istemcilere gönderir.
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.
webpubsub-quickstart-publisher dizinine gidin ve aşağıdaki komutu kullanarak projeyi çalıştırın:
Bu hızlı başlangıçta, bir uygulama sunucusundan hub'daki tüm bağlı istemcilere ileti göndermenin ne kadar kolay olduğu gösterilmektedir. Ayrıca, Web PubSub iletileri
hub'daki istemcilerin bir alt kümesi
hub'daki belirli bir grup
gruptaki istemcilerin bir alt kümesi
Bu API'ler, geliştiricilerin benzersiz iş mantığına odaklanmasını sağlarken Web PubSub'un düşük gecikme süresi (<100ms), yüksek kullanılabilirlik ve büyük ölçekli (milyondan fazla eşzamanlı bağlantı) sunduğundan emin olmasını sağlar.
Sonraki adımlar
Sonraki adımda, eksiksiz web uygulamaları oluşturmak için gereken Web PubSub olay sistemiyle nasıl çalışacağımızı keşfedeceğiz.
SignalR Hizmeti, Azure Cosmos DB ve Azure İşlevleri ile JavaScript web uygulaması güncelleştirme mekanizmasını yoklamadan gerçek zamanlı anında iletme tabanlı mimariye değiştirin. Visual Studio Code kullanarak SignalR kullanmak için Vue.js ve JavaScript kullanın.