はじめに
SWEST 26 に参加してきました
(台風のため、泣く泣く現地参加を諦めオンライン参加)
セッション「すべてが #Zenoh になる 〜柔軟にして軽量〜」でハンズオンを受けたので、Livebook でも Zenoh を動かしてみました
登壇した高瀬さんのハンズオン資料はこちら
この記事で実装したノートブックはこちら
ブラウザ準備
Livebook を起動し、二つのウィンドウで新しいノートブックを開きます
通信結果が分かりやすいように上下に並べておきましょう
この記事では上側の Publisher ノートブック、 下側を Subscriber ノートブックとして進めます
Publisher ノートブックのセットアップ
Publisher ノートブックのセットアップセルで以下のコードを実行します
Mix.install([
{:zenohex, "~> 0.3"},
{:kino, "~> 0.14"}
])
Zenohex は Elixir 用の Zenoh モジュールです
Kino は Livebook の UI/UX 用にインストールしています(Zenoh には不要)
セッションを開き、 Publisher を作成します
{:ok, session} = Zenohex.open()
{:ok, publisher} =
Zenohex.Session.declare_publisher(session, "key/expression")
"key/expression"
でキーを指定しています
Publisher と Subscriber で共通のキーを指定することで、 Pub/Sub 通信できます
Publish するメッセージを入力するためのテキストエリアを作ります
input = Kino.Input.textarea("MESSAGE")
表示されたテキストエリアに適当な値を入力しておきましょう
次のセルにメッセージ送信のコードを入力し、実行はしないままにしておきます
message = Kino.Input.read(input)
Zenohex.Publisher.put(publisher, message)
Subscriber ノートブックのセットアップ
Subscriber ノートブックのセットアップセルで以下のコードを実行します
(Publisher ノートブックと同じ)
Mix.install([
{:zenohex, "~> 0.3"},
{:kino, "~> 0.14"}
])
セッションを開き、 Subscriber を作成します
{:ok, session} = Zenohex.open()
{:ok, subscriber} =
Zenohex.Session.declare_subscriber(session, "key/expression")
declare_subscriber
で Publisher と同じキーを指定しています
次に、受け取ったメッセージを表示するためのフレームを用意します
frame = Kino.Frame.new()
次のセルにメッセージ受信のコードを入力し、実行しないままにしておきます
case Zenohex.Subscriber.recv_timeout(subscriber, 10_000_000) do
{:error, :timeout} ->
nil
{:ok, msg} ->
Kino.Frame.append(frame, Kino.Markdown.new(msg.value))
end
recv_timeout
の第2引数はタイムアウトのマイクロ秒指定(10秒)です
Pub/Sub の実行
Subscriber ノートブックの最後のセルを実行した後、すぐに Publisher ノートブックの最後のセルを実行しましょう
メッセージが受信され、フレームに表示されます
まとめ
Zenohex を使うことで、 Zenoh による Pub/Sub 通信が実行できました
非常に軽量で高速ということなので、いろいろなことに使ってみたいと思います