参考
aa
公式ドキュメント
- The PubNub Platform Overview
- SDK
- PubNubのGitHub
- Pythonチュートリアル
- Python API
- サインアップ
- プライシング
- Files API for PubNub Python SDK
- download-file
- send-file
blog
サンプル
メモ
概要
The PubNub Platform Overview によると、
とのこと。 概要にIoTと記載されている通り、小型のデバイス利用も想定されているようだ。 主な用途は「メッセージング」と「シグナリング」。
特徴は以下の通り。
サイズの小さなメッセージに限らず、画像、動画、ファイルを対象に含めているのがポイントか。
ユースケースは以下の通り。
これ自体に特筆すべきポイントはない。
SDK に記載のある通り、非常に幅広いSDKを提供している。
PubNubのGitHub を見る限り、多様なクライアントライブラリがOSSとして公開、開発されているようだ。
動作確認
プライシング によるとアカウントを作ってお試しする限りでは無料のようだ。 ということで、Pythonチュートリアル の通り実行してみる。
このチュートリアルでは、PubSubモデルのメッセージングを試せる。
アカウント作成
サインアップ からアカウント作成。 もろもろ情報入れて登録したら、Demo Keysetが得られた。
(補足)公式チュートリアルのソースコード
以下のようにクローンできる。
1 | [dobachi@home Sources]$ git clone git@github.com:pubnub/python-quickstart-platform.git |
今回はゼロから作ってみるので、これは参考とする。
プロジェクトディレクトリ作成
適当なところに空ディレクトリを作り、プロジェクトのルートとする。
1 | [dobachi@home Sources]$ mkdir pubnub_example |
今回は、pyenvを利用してインストールしたPython3.8.10を利用し、venvで環境構築する。
1 | [dobachi@home pubnub_example]$ pyenv local 3.8.10 |
ここで、Pythonチュートリアル に従い、2個の実装pub.py、sub.pyを作成する。 このとき、ソースコードのキーのところに先ほどアカウント作成した際に得られたキーを記載するようにする。
ここから端末を2個立ち上げる。
1個目でサブスクライバーを起動
1 | (venv) [dobachi@home pubnub_example]$ python sub.py |
2個目でパブリッシャーを起動
1 | (venv) [dobachi@home pubnub_example]$ python pub.py |
プロンプトが表示されるので、「Harmless」と入力してエンターキーを押下。
サブスクライバーに以下のように表示される。
1 | [MESSAGE received] |
Pythonチュートリアル に実装の説明があるが、 基本的には
- サブスクライバーはハンドラの実装のみ
- パブリッシャーは標準入力からメッセージを受け取り、それを送信するのみ
という単純な仕組み。
パブリッシャー側のポイントは、
1 | envelope = pubnub.publish().channel(CHANNEL).message(the_message).sync() |
まだ詳しくは分からないが、チャンネルやエントリという概念がありそう。 チャンネルを使うと同報できるのだろうか。
Python API あたりを読むと記載ありそう。
ファイル
Files API for PubNub Python SDK を読むと、ファイルを取り扱うAPIがあった。 5MBまでのファイルをアップロードできるようだ。 アプリケーションで画像を取り扱う場合などを想定している様子。
これを簡単に動作確認してみる。 Pythonチュートリアル のサンプルコードpub.pyとsub.pyを参考に実装する。 参考実装を PubNubExample にまとめておいた。 READMEを参照。
メッセージングのAPIとは異なるが、簡単に小さなファイルを登録できるのは便利ではある。
またファイルを登録したことを通知するAPIもあるようだ。 これは使い方としては
- ファイルを送信し、合わせてファイル送信したことをチャンネルにメッセージ送信
- 受信者は、メッセージを受領したら、その情報を使ってファイル受信
ということだと思われる。 ファイルの送受信自体は、メッセージングのようにSubscribeできず、 単発実行のAPIであり、かつ受信についてはIDを引数に渡さないといけないから、と考えられる。
(補足)ERROR: Could not find a version that satisfies the requirement pubnub>=4.5.1
以下のようなエラーが出たら、
1 | ERROR: Could not find a version that satisfies the requirement pubnub>=4.5.1 |
libffi-devel
をインストールしたうえで、Pythonをビルドするようにするとよい。
1 | (venv) [dobachi@home pubnub_example]$ pyenv uninstall 3.8.10 |