如何在 Ruby 中实现 Pubnub 存在功能

2024-02-01

我想知道如何在 Rails 应用程序中使用 PubNub 实现用户存在,但我没有找到有关如何在服务器端和客户端实现此功能的完整指南。


使用 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Ruby 中实现 Pubnub 存在功能 的相关文章

随机推荐

  • 在 Scala / Spark 中将文件从一个文件夹移动到 HDFS 上的另一个文件夹

    我有两个路径 一个用于文件 一个用于文件夹 我想将文件移动到 HDFS 上的该文件夹中 我怎样才能在 Scala 中做到这一点 我也在用 Spark 如果相同的代码也适用于 Windows 路径 就像在 HDFS 上读取 写入文件一样 但不
  • 对 WTForms form.errors 字典进行排序

    forms errors 字典似乎是按字段名称排序的 而不是按 它们在表格本身中声明的顺序 E g class ProductForm Form code TextField Code validators Required descrip
  • 构建错误 -Ionic Cordova 在 Android 上失败 [重复]

    这个问题在这里已经有答案了 运行命令 ionic cordova build android stacktrace 时出现以下错误 generateDebugResources mergeDebugResources processDebu
  • 为什么 std::queue 不支持 clear() 函数?

    我有一个要求 对于一个函数 我将输入作为数字流 我的意思是 该函数在每次调用中都会继续使用单个数字进行调用 我在用std queue用于存储数字流 仅当满足某些条件时 我才需要处理一组收集的数字 如果不满足条件 我需要将所有元素放入队列中
  • 如何通过 Alchemy gcc 编译 ffmpeg?

    所以我创建了ffmpeg配置文件 使其成为纯C 平台无关 但只是理论上 所以我的配置很简单 0 6 1 0 6 3测试过 configure disable doc disable ffplay disable ffprobe disabl
  • CSS 网格布局最大内容在 Firefox 中无法按预期工作

    我使用 CSS 网格布局来创建页面的基本布局 并且我最初是在 Chrome 中工作的 我现在也在 Firefox 中对此进行了测试 并注意到一些我不理解的行为 并且似乎不符合我所理解的规范 我创建了一个显示该行为的简化示例 问题是搜索标题
  • Android 和 CommaTokenizer

    我需要一个 Tokenizer 用于 AutoCompleteTextview 它可以执行以下操作 当两个单词以空白字符分隔时 必须按原样进行识别 当用换行符分隔时 两个单词也必须被识别 按下 Enter 键 1 正在工作 但我怎样才能完成
  • laravel - 无法在控制器构造函数中获取会话

    在新的 Laravel 中 我无法在构造函数中获取会话 为什么 public function construct dd Session all this is empty array 然后下面 public function index
  • HTTP:200 OK 状态代码后回复期间出错

    作为 HTTP 1 1 服务器 我使用 200 OK 状态代码回复 GET 请求 然后开始将数据发送到客户端 在此发送过程中 发生错误 我无法完成 我无法发送新的状态代码 因为最终状态代码已发送 我应该如何让客户端知道发生了错误并且我无法继
  • 如何在 Python 3.x 中禁用 chrome webdriver 上的调试器?

    有人知道如何在 Python 3 6 中禁用 chrome webdriver 中的调试器 日志记录吗 我正在尝试遵循代码 但它不起作用 chrome options webdriver ChromeOptions chrome optio
  • 如何根据测试用例结果运行SoapUI中的指定步骤

    我在soapui中有一个项目 有更多的测试用例 运行每个测试用例后 我需要运行两个 http 请求之一 具体取决于步骤的结果 因此 如果测试用例中的一个或多个步骤失败 我需要运行 httprequest1 如果所有步骤都通过 我需要运行 h
  • 在andengine中使用Texture Packer加载动画

    我使用纹理打包器 我有 pvr ccz文件有10帧 我需要创建一个AnimatedSprite使用此动画 但 TexturePacker 扩展仅返回TextureRegion files 我怎样才能创造TiledTextureRegion从
  • CakePHP,从模型查询

    如何在 CakePHP 中执行 SQL 查询 我想做一些像这样的代码 employees this gt Employee gt find all 但介绍一下我自己的SQL语句 将执行 SQL 语句的函数插入模型中 public funct
  • VBA查找函数获取错误424需要对象[重复]

    这个问题在这里已经有答案了 我有代码获取错误 424 需要对象 lr Range O O Cells Rows Count 1 End xlUp Row For y 0 To UBound myVariable a myVariable y
  • 如何在 Netbeans 中向 Undecorated JFrame 添加阴影

    我想向 Undecorated jFrame 添加阴影 我不知道该怎么做 有人知道吗 这有点 作弊 这不会在窗口后面产生阴影 而是在内容后面产生阴影 这种方法不仅使窗口不被装饰 而且变得透明 替换的 内容窗格 被部分填充 允许阴影效果 出现
  • C# Winforms,将父对象分配给新的子对象,而不是实例化表单

    我有一个带有两个子窗体的 MDI 容器 我们被教导 MSDN 文档只给出了示例 使用关键字 this 它假设所讨论的子对象是从 MDI 容器本身创建的 如果我在 MDI 容器中创建对象 则这是正确的 Form Child2 child ne
  • 类型错误:stripe.redirectToCheckout 不是 nuxt.js 中的函数

    我正在尝试集成条纹支付网关 我有一个用于前端的 nuxt js 和一个用于后端的 adonis js 我从前端调用 api 到后端来创建checkoutSession并返回sessionID 我能够创造checkoutSession并返回s
  • 如何在matplotlib中的不同图形中使用不同颜色图显示图像?

    我想在不同的图形中使用不同的颜色贴图显示图像 以下代码使用两个不同的窗口但具有相同的颜色图显示图像 import scipy misc from pylab import a scipy misc imread lena jpg figur
  • Objective-c 上的大整数

    任何人都可以提供代码BigInteger http docs oracle com javase 8 docs api java math BigInteger htmlObjective C 中提供 PowMod 函数的实现 我希望现在回
  • 如何在 Ruby 中实现 Pubnub 存在功能

    我想知道如何在 Rails 应用程序中使用 PubNub 实现用户存在 但我没有找到有关如何在服务器端和客户端实现此功能的完整指南 使用 Ruby 和 JavaScript 实现 PubNub 存在 按照这个连接两个 PubNub SDK