使用 Ruby 和 JavaScript 实现 PubNub 存在
按照这个连接两个 PubNub SDK 之间状态的简短指南,轻松开始使用 Ruby 和 JavaScript 中的 PubNub Presence。首先,您需要确保您拥有最新的PubNub 红宝石宝石客户端 SDK 安装在您的服务器上。但在我们进入编码方面之前,我们可以讨论一下PubNub 存在实际上是。
PubNub 存在介绍
PubNub Presence 允许您提问“谁在那儿?”并收到一个答案用户 ID 列表以及当前在线人数的占用计数。
通常您会在 PubNub 频道的上下文中提出这个问题。用户连接到 PubNub 通道以便从 PubNub 网络接收数据流。您可以通过任何有效的 UTF-8 字符串发布和订阅频道来控制频道。有时您想通过请求通道上的当前活动和已连接用户列表来了解 PubNub 通道的当前状态。您可以使用 PubNub Presence 功能来完成此操作,该功能可提供您寻求的答案。
PubNub 存在 SDK
让我们首先列出为您的目标平台包含/加载 GEM 和 JavaScript SDK 的两个起始步骤(这次是 Ruby+JavaScript 组合)。
安装 PubNub Ruby GEM
sudo gem install pubnub
接下来,您将确保在 JavaScript 客户端应用程序(通常是手机应用程序或网站应用程序)上运行最新的 JavaScript SDK 之一。
包含 PubNub JavaScript 客户端 SDK
<script src=http://cdn.pubnub.com/pubnub-3.4.2.min.js ></script>
现在您已经访问了 Ruby 和 JavaScript 的两个必要的基础 SDK 库,您可以通过 PubNub 网络自由地接收/传输信息。接下来我们将讨论如何轻松接收 PubNub 频道上发生的在线状态事件,以及如何直接查询当前频道状态here_now()
API.
PubNub 开发控制台 - 状态
Use the PubNub 开发者控制台 http://www.pubnub.com/console监视存在事件。
您可以使用 PubNub 开发人员控制台来观察发生的状态事件。您将能够在状态部分中看到 JSON 形式的事件负载,如下图所示:
一共有三个事件"action"
您可以收到包括:
-
"join"
- 有新用户加入频道。
-
"leave"
- 用户离开频道。
-
"timeout"
- 用户断开连接并超时。
通过 REST 实现 PubNub 存在
现在就在这里
通过 PubNub Presence,您可以访问两条 REST 路线。最简单的路线是here_now()
route.
PubNub 与 SDK 的存在
JavaScript 中的示例源代码
以下是 JavaScript 中的方法示例,用于接收通道上的数据并接收该通道实时发生的状态事件。您还会注意到在函数回调中传递给您的参数。此方法允许您将数据流接收到 JavaScript 应用程序中。请注意,还有第二种接收状态数据的方法(称为 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)传入时对其进行处理。请注意,还有第二种方法可以接收状态数据(称为 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()
您可以使用该函数向 PubNub 网络发出单个 REST 请求,该请求获取Current通道的连接状态。该请求如下所示:
<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}
Ruby 中的 Here_Now
就像 JavaScript 中的相同函数一样here_now()
Ruby 中也可用。这是 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}
就是这样!超级简单且易于使用的 PubNub Network Presence 与 Ruby on Rails 和 JavaScript。如果您有任何疑问,请直接联系 PubNub,并访问以下链接了解更多详细信息:
- PubNub 网络 Ruby SDK -https://github.com/pubnub/ruby https://github.com/pubnub/ruby
- PubNub 网络 JavaScript SDK -https://github.com/pubnub/javascript#simple-example https://github.com/pubnub/javascript#simple-example