クイックスタート: Azure Web PubSub サービス SDK を使用してメッセージを発行する
[アーティクル] 04/06/2023
3 人の共同作成者
フィードバック
この記事の内容
Azure Web PubSub は、WebSocket クライアントの管理に役立ちます。 このクイックスタートでは、Azure Web PubSub サービス SDK を使用して WebSocket クライアントにメッセージを発行する方法について説明します。
前提条件
Azure サブスクリプションをお持ちでない場合は、無料アカウント を作成してください。
Bash と PowerShell コマンド シェル。 Python、Javascript、Java のサンプルでは、Bash コマンド シェルが必要です。
VSCode などのファイル エディター。
Azure CLI: Azure CLI をインストールする
ローカル コンピューターでプロジェクトを作成する場合は、以下のように使用している言語の依存関係をインストールする必要があります。
.NET Core SDK と aspnetcore
の両方と dotnet ランタイムをインストールします。
.NET Core
1. セットアップ
CLI から Azure にサインインするには、次のコマンドを実行し、プロンプトに従って認証プロセスを完了します。 Cloud Shell を使用している場合は、サインインする必要はありません。
az login
upgrade コマンドを使用して、最新バージョンの CLI を実行していることを確認します。
az upgrade
次に、az upgrade
でインストールされていない場合は、CLI 用の Azure Web PubSub 拡張機能をインストールまたは更新します。
az extension add --name webpubsub --upgrade
1. リソース グループを作成する
以下の環境変数を設定します。
<プレースホルダー> を、一意の 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 によって使用されます。
重要
運用環境では、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'
クライアントが正常に接続され、一意の connectionId
が割り当てられていることを示す JSON メッセージが表示されたら、Web PubSub サービスへの接続が確立されています。
{"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 を使用して独自のアプリケーションを構築できます。 また、サーバーレス アプリケーションを簡単に構築するための関数の拡張機能も用意しています。
これらのリソースを使用して、独自のアプリケーションの構築を開始します。