Rails アプリで PubNub を使用してユーザー プレゼンスを実装する方法を考えていましたが、サーバー側とクライアント側の両方でこの機能を実装する方法についての完全なガイドは見つかりませんでした。
1 に答える
Ruby と JavaScript を使用した PubNub の存在
2 つの PubNub SDK 間の状態を関連付けるこの短いガイドに従うことで、Ruby と JavaScript で PubNub プレゼンスを簡単に開始できます。まず、最新のPubNub Ruby GEMクライアント SDK がサーバーにインストールされていることを確認してください。しかし、コーディングの側面に入る前に、PubNub プレゼンスが実際に何であるかについて話すことができます.
PubNub プレゼンスの紹介
PubNub プレゼンスを使用すると、 「そこにいるのは誰ですか?」という質問をすることができます。そして、UserID のリストと、現在オンラインになっているユーザーの占有数の 形式で回答を受け取ります。
通常、PubNub チャネルのコンテキストでこの質問をします。ユーザーは、PubNub ネットワークからデータのストリームを受信するために PubNub チャネルに接続します。有効な UTF-8 文字列を使用してチャネルに発行およびサブスクライブすることにより、チャネル経由でストリームを制御します。PubNub チャネルの現在のアクティビティと、チャネルで接続されているユーザーのリストを要求することで、PubNub チャネルの現在の状態を知りたい場合があります。これは、求めている答えを提供する PubNub プレゼンス機能を使用して行うことができます。
PubNub プレゼンス SDK
ターゲット プラットフォーム用の GEM および JavaScript SDK をインクルード/ロードする 2 つの開始ステップをリストすることから始めましょう (今回は Ruby+JavaScript コンボです)。
PubNub Ruby GEM をインストールする
sudo gem install pubnub
次に、JavaScript クライアント アプリ (通常は携帯電話アプリまたは Web サイト アプリ) で最新の JavaScript SDK のいずれかを実行していることを確認します。
PubNub JavaScript クライアント SDK を含める
<script src=http://cdn.pubnub.com/pubnub-3.4.2.min.js ></script>
Ruby と JavaScript に必要な 2 つの基本 SDK ライブラリにアクセスしたので、PubNub Network を介して自由に情報を送受信できます。次に、PubNub チャネルで発生したプレゼンス イベントを簡単に受信する方法と、here_now()
API を使用して現在のチャネル状態を直接クエリする方法について説明します。
PubNub 開発コンソール - プレゼンス
PubNub Developer's Consoleを使用して、プレゼンス イベントを監視します。
PubNub Developer's Console を使用して、発生したプレゼンス イベントを監視できます。次の画像に示すプレゼンス セクションで、JSON 形式のイベント ペイロードを確認できます。
次の3 つのイベント"action"
を受け取ることができます。
"join"
- 新しいユーザーがチャンネルに参加しました。"leave"
- ユーザーがチャンネルを離れました。"timeout"
- ユーザーが接続を切断し、タイムアウトしました。
REST を使用した PubNub プレゼンス
今すぐパブナブ
PubNub プレゼンスを使用すると、2 つの REST ルートにアクセスできます。最も簡単なルートはhere_now()
ルートです。
SDK を使用した PubNub の存在
JavaScript のソース コードの例
以下は、チャネルでデータを受信し、リアルタイムで発生するそのチャネルのプレゼンス イベントも受信する JavaScript のメソッドの例です。また、関数コールバックで渡されるパラメーターにも気付くでしょう。このメソッドを使用すると、データのストリームを JavaScript アプリケーションで受け取ることができます。プレゼンス データを受け取る 2 番目のメソッド (here_now() と呼ばれる) があることに注意してください。これについては、もう少し下で説明します。
<script>(function(){
var pubnub = PUBNUB.init({
subscribe_key : 'demo'
});
pubnub.subscribe({
channel : "hello_world", // YOUR CHANNEL.
message : function( message, env, channel ) {}, // RECEIVE MESSAGE.
presence : function( message, env, channel ) { // PRESENCE EVENTS.
console.log( "Channel: ", channel );
console.log( "Join/Leave/Timeout: ", message.action );
console.log( "Occupancy: ", message.occupancy );
console.log( "User ID: ", message.uuid );
}
})
})();</script>
Ruby のソースコードの例
これは、発生時にリアルタイムでプレゼンス イベントを受信する Ruby メソッドである Ruby コードです。イベントのストリームまたは (Firehose) を受信時に処理できます。プレゼンス データを受信する 2 つ目のメソッド (here_now() と呼ばれる) があることに注意してください。これについては、もう少し下で説明します。
require 'pubnub'
pubnub = Pubnub.new(
:publish_key => 'demo', # publish_key only required if publishing.
:subscribe_key => 'demo', # required
:secret_key => nil, # optional, if used, message signing is enabled
:cipher_key => nil, # optional, if used, encryption is enabled
:ssl => nil # true or default is false
)
## Receive Presence Events on a Channel
pubnub.presence(
:channel => :hello_world,
:callback => lambda { |event_data| puts(event_data) }
)
イベント (ユーザーの参加など) が発生すると、出力データは次のようになります。
{"action":"join", "timestamp":1364261400, "uuid":"9d497a30-3af2-4b67-a6b3-82f254711c11", "occupancy":4}
ユーザーの切断時に、プレゼンス イベントは次のようにトリガーされます。
{"action":"leave", "timestamp":1364251540, "uuid":"9d497a30-3af2-4b67-a6b3-82f254711c11", "occupancy":3}
エラー/タイムアウトが発生した場合:
{"action":"timeout", "timestamp":1364251540, "uuid":"9d497a30-3af2-4b67-a6b3-82f254711c11", "occupancy":3}
JavaScript で Here_Now
チャネルの接続の現在のhere_now()
状態を取得する単一の REST 要求を PubNub ネットワークに発行できる機能があります。リクエストは次のようになります。
<script>(function(){
var pubnub = PUBNUB.init({
subscribe_key : 'demo'
});
pubnub.here_now({
channel : 'hello_world',
callback : function (message) { console.log(message) }
});
})();</script>
応答オブジェクトは次のようになります。
{"uuids":["754e58b3-a79b-4d91-8f6c-5d994e43a310","175c2c67-b2a9-470d-8f4b-1db94f90e39e","fafd273d-9be5-4049-a6ce-653c467f7c5d"],"occupancy":3}
Here_Now in Ruby
JavaScript と同じようにhere_now()
、Ruby でも同じ関数を使用できます。ルビーの構文バージョンは次のとおりです。
require 'pubnub'
pubnub = Pubnub.new(
:publish_key => 'demo', # publish_key only required if publishing.
:subscribe_key => 'demo', # required
:secret_key => nil, # optional, if used, message signing is enabled
:cipher_key => nil, # optional, if used, encryption is enabled
:ssl => nil # true or default is false
)
pubnub.here_now(
:channel => :hello_world,
:callback => lambda { |event_data| puts(event_data) }
)
また、応答オブジェクト データは、JavaScript で使用できるものと同じです。
{"uuids":["754e58b3-a79b-4d91-8f6c-5d994e43a310","175c2c67-b2a9-470d-8f4b-1db94f90e39e","fafd273d-9be5-4049-a6ce-653c467f7c5d"],"occupancy":3}
最後に、PubNub Network が提供する単純な JSON REST インターフェイスを使用する場合は、次のリクエストを簡単に発行できます。
curl http://pubsub.pubnub.com/v2/presence/sub_key/demo/channel/hello_world
応答出力は同じです。
{"uuids":["754e58b3-a79b-4d91-8f6c-5d994e43a310","175c2c67-b2a9-470d-8f4b-1db94f90e39e","fafd273d-9be5-4049-a6ce-653c467f7c5d"],"occupancy":3}
それでおしまい!Ruby on Rails と JavaScript を使用した非常にシンプルで使いやすい PubNub ネットワーク プレゼンス。ご不明な点がございましたら、PubNub に直接お問い合わせください。詳細については、次のリンクもご覧ください。
- PubNub ネットワーク Ruby SDK - https://github.com/pubnub/ruby
- PubNub ネットワーク JavaScript SDK - https://github.com/pubnub/javascript#simple-example