Azure Web PubSub は、WebSocket クライアントの管理に役立ちます。 このクイックスタートでは、Azure Web PubSub サービス SDK を使用して WebSocket クライアントにメッセージを発行する方法について説明します。
[前提条件]
- Azure サブスクリプション (お持ちでない場合は、 無料アカウント) を作成します。
- Bash と PowerShell のコマンド シェル。 Python、JavaScript、Java のサンプルには、Bash コマンド シェルが必要です。
- VS Code などのファイル エディター。
- Azure CLI: Azure CLI をインストールする
ローカル コンピューターでプロジェクトを作成する場合は、使用している言語の依存関係をインストールする必要があります。
.NET Core SDK と aspnetcore
and dotnet ランタイムの両方をインストールします。
.NET Core
1. セットアップ
CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。 Cloud Shell を使用している場合は、サインインする必要はありません。
az login
upgrade コマンドを使用して、最新バージョンの CLI を実行していることを確認します。
az upgrade
次に、CLI の Azure Web PubSub 拡張機能をインストールまたは更新します ( az upgrade
と共にインストールされていない場合)。
az extension add --name webpubsub --upgrade
1. リソース グループを作成する
以下の環境変数を設定します。
<placeholder> を一意の Web PubSub 名に置き換えます。
RESOURCE_GROUP="webpubsub-resource-group"
LOCATION="EastUS"
WEB_PUBSUB_NAME="<your-unique-name>"
$ResourceGroupName = 'webpubsub-resource-group'
$Location = 'EastUS'
$WebPubSubName = '<YourUniqueName>'
Web PubSub プロジェクトのリソース グループを作成します。
az group create \
--name $RESOURCE_GROUP \
--___location $LOCATION
az group create --___location $Location --name $ResourceGroupName
2. Web PubSub サービスインスタンスをデプロイする
az webpubsub create
コマンドを使用して、Web PubSub サービス・インスタンスを作成およびデプロイします。
az webpubsub create \
--name $WEB_PUBSUB_NAME \
--resource-group $RESOURCE_GROUP \
--___location $LOCATION \
--sku Free_F1
az webpubsub create `
--name $WebPubSubName `
--___location $Location `
--resource-group $ResourceGroupName `
--sku Free_F1
サービスの接続文字列を保存します。 接続文字列は、サービス SDK がメッセージを公開するために使用されます。
Von Bedeutung
運用環境では、Azure Key Vault を使用して接続文字列を安全に格納する必要があります。
az webpubsub key show --name $WEB_PUBSUB_NAME --resource-group $RESOURCE_GROUP --query primaryConnectionString
az webpubsub key show --name $WebPubSubName --resource-group $ResourceGroupName --query primaryConnectionString
3. クライアントをサービス インスタンスに接続する
Web PubSub クライアントを作成します。 クライアントは、サービスが終了するまでサービスへの接続を維持します。
az webpubsub client
コマンドを使用して、サービスへの WebSocket クライアント接続を開始します。 クライアントは常にハブに接続するため、接続先のクライアントのハブ名を指定します。
az webpubsub client start \
--name $WEB_PUBSUB_NAME \
--resource-group $RESOURCE_GROUP \
--hub-name "myHub1" \
--user-id "user1"
az webpubsub client start `
--name $WebPubSubName `
--resource-group $ResourceGroupName `
--hub-name 'myHub1' `
--user-id 'user1'
Web PubSub サービスへの接続は、クライアントが正常に接続され、一意の connectionId
が割り当てられたことを示す JSON メッセージが表示されたときに確立されます。
{"type":"system","event":"connected","userId":"user1","connectionId":"<your_unique_connection_id>"}
4. サービスSDKを使用したメッセージの公開
Azure Web PubSub SDK を使用して、ハブに接続されているすべてのクライアントにメッセージを発行します。
C#、JavaScript、Python、Javaから選択できます。 各言語の依存関係は、その言語のステップでインストールされます。 Python、JavaScript、Java では、このクイックスタートのコマンドを実行するために bash シェルが必要です。
メッセージを公開するようにプロジェクトを設定する
このプロジェクトの新しいコマンド シェルを開きます。
クライアントシェルから接続文字列を保存します。
<your_connection_string>
プレースホルダーを、前の手順で表示した接続文字列に置き換えます。
connection_string="<your_connection_string>"
$connection_string = "<your_connection_string>"
次に、プロジェクトの言語を選択します。
publisher
という名前の新しいプロジェクトと SDK パッケージ Azure.Messaging.WebPubSub
を追加します。
mkdir publisher
cd publisher
dotnet new console
dotnet add package Azure.Messaging.WebPubSub
Program.cs
ファイルを更新して、WebPubSubServiceClient
クラスを使用してクライアントにメッセージを送信します。
Program.cs
ファイル内のコードを次のコードで置き換えます。
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];
var service = new WebPubSubServiceClient(connectionString, hub);
// Send messages to all the connected clients
// You can also try SendToConnectionAsync to send messages to the specific connection
await service.SendToAllAsync(message);
}
}
}
service.SendToAllAsync()
の呼び出しでは、単純にハブ内の接続されているすべてのクライアントにメッセージが送信されます。
次のコマンドを実行して、メッセージをサービスに発行します。
dotnet run $connection_string "myHub1" "Hello World"
Web PubSub クライアントを含む前のコマンド シェルには、受信したメッセージが表示されます。
{"type":"message","from":"server","dataType":"text","data":"Hello World"}
このプロジェクト用に publisher
という名前の新しいフォルダーを作成し、必要な依存関係をインストールします。
mkdir publisher
cd publisher
npm init -y
npm install --save @azure/web-pubsub
Azure Web PubSub SDK を使用して、サービスにメッセージを発行します。 次のコードを含む publish.js
ファイルを作成します。
const { WebPubSubServiceClient } = require('@azure/web-pubsub');
if (process.argv.length !== 3) {
console.log('Usage: node publish <message>');
return 1;
}
const hub = "myHub1";
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" });
sendToAll()
の呼び出しでは、単純にハブ内の接続されているすべてのクライアントにメッセージが送信されます。
次のコマンドを実行して、メッセージをサービスに発行します。
export WebPubSubConnectionString=$connection_string
node publish "Hello World"
Web PubSub クライアントを含む前のコマンド シェルには、受信したメッセージが表示されます。
{"type":"message","from":"server","dataType":"text","data":"Hello World"}
このプロジェクト用に publisher
という名前の新しいフォルダーを作成し、必要な依存関係をインストールします。
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 を使用して、サービスにメッセージを発行します。 下のコードを使用して publish.py
ファイルを作成します。
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)
service.send_to_all()
メソッドは、ハブ内の接続されているすべてのクライアントにメッセージを送信します。
次のコマンドを実行して、メッセージをサービスに発行します。
python publish.py $connection_string "myHub1" "Hello World"
Web PubSub クライアントを含む前のコマンド シェルには、受信したメッセージが表示されます。
{"type":"message","from":"server","dataType":"text","data":"Hello World"}
Maven を使用して webpubsub-quickstart-publisher
という名前の新しいコンソール アプリを作成し、 webpubsub-quickstart-publisher ディレクトリに移動します。
mvn archetype:generate --define interactiveMode=n --define groupId=com.webpubsub.quickstart --define artifactId=webpubsub-quickstart-publisher --define archetypeArtifactId=maven-archetype-quickstart --define archetypeVersion=1.4
cd webpubsub-quickstart-publisher
Azure Web PubSub SDK を pom.xml
の dependencies
ノードに追加します。
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-messaging-webpubsub</artifactId>
<version>1.0.0</version>
</dependency>
src/main/java/com/webpubsub/quickstart ディレクトリに移動します。
App.javaファイルの内容を次のコードで置き換えます。
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);
}
}
このコードでは、Azure Web PubSub SDK を使用して、メッセージをサービスに発行します。
service.sendToAll()
の呼び出しでは、ハブ内の接続されているすべてのクライアントにメッセージが送信されます。
pom.xml ファイルが含まれている webpubsub-quickstart-publisher ディレクトリに戻り、次の mvn
コマンドを使用してプロジェクトをコンパイルします。
mvn compile
パッケージをビルドします。
mvn package
次の mvn
コマンドを実行してアプリを実行し、サービスにメッセージを発行します。
mvn exec:java -Dexec.mainClass="com.webpubsub.quickstart.App" -Dexec.cleanupDaemonThreads=false -Dexec.args=" '$connection_string' 'myHub1' 'Hello World'"
Web PubSub クライアントを含む前のコマンド シェルには、受信したメッセージが表示されます。
{"type":"message","from":"server","dataType":"text","data":"Hello World"}
クリーンアップ
このクイック スタートで作成したリソースは、それらを含むリソース グループを削除することで削除できます。
az group delete --name $RESOURCE_GROUP --yes
d
az group delete --name $ResourceGroup --yes
次のステップ
このクイックスタートでは、Web PubSub サービスに接続する方法と、接続されているクライアントにメッセージを発行する方法の基本概念について説明しています。
実際のアプリケーションでは、さまざまな言語の SDK を使用して独自のアプリケーションを構築できます。 また、サーバーレス アプリケーションを簡単に構築するための関数の拡張機能も用意しています。
これらのリソースを使用して、独自のアプリケーションの構築を開始します。