Rails 3.0+ 使用 PubNub 实时推送内容
正如您所说,为了在您的网站或 Web 应用程序上使用某些社交功能安全可靠地向您的用户推送实时更新,有许多可用选项和许多细微差别也需要考虑。 这有一个宝石! 我将通过在此处为您的 Rails 3.0+ 应用程序和网站提供简单的入门指南来帮助您入门。首先,您需要运行gem install pubnub
称为 PubNub 的实时组件,它允许您直接向目标用户或网站和应用程序上的一组用户发送通知。这允许您只针对那些在线并有兴趣从您的 Rails 服务器接收通知的人。您可以将其视为高效的服务器发送事件,不需要在您的服务器上进行数据库查找或其他资源密集型操作。
Ruby GEM 安装
gem install pubnub
需要 PubNub GEM
require 'pubnub'
初始化 PubNub 类
pubnub = Pubnub.new(
:publish_key => 'demo', # publish_key only required if publishing.
:subscribe_key => 'demo', # required always
:secret_key => nil, # optional - message signing
:cipher_key => nil, # optional - AES 256 Crypto
:ssl => true # optional - SSL 2048bit
)
从 Rails 3.0+ 向 Web 应用程序发送消息
现在从准备好类的 Rails 应用程序中pubnub
,您可以发送任何类型的 JSON 数据类型,包括字符串、数字、数组和字典/对象:
- 一个“字符串”
- 123 号
- 一个数组 [ 1, 2, 3 ]
- 一个对象 { :a => "苹果" }
以下代码将向您展示将消息从 Rails 应用程序直接传递到用户正在运行的浏览器或 Web 应用程序的过程。当您需要直接从服务器发送数据时,本质上就是将数据发送给您的用户。该pubnub.publish(...)
函数会将您发送的消息序列化为 JSON,以便传输到您的移动和 Web 应用程序。
## Broadcast or Unicast to Browser App User(s)
pubnub.publish(
:channel => "event_feed_channel",
:message => { :event => "update", :from => "Jay", :feed => "New Updates!" },
:callback => lambda { |info| puts info }
)
此过程非常适合性能和安全考虑,并且从不需要数据库查询;使您免于对数据库服务器和其他资源密集型操作进行重击。当您在 Rails 应用程序中使用 PubNub GEM 时, 您可以将此过程视为SSE(服务器发送事件) 。
使用 PubNub GEM,您实际上是将事件从服务器直接发送到用户的浏览器/应用程序。它消除了对客户端定期 AJAX 请求的需要。这是因为您仅在有新信息可用时才向用户发送数据。您还可以考虑使用更多 PubNub 实时网络功能,例如 Presence 和 Storage/Playback,方法是访问主页以了解有关 Ruby 功能的更多详细信息。如果需要,还可以在集成到 Rails 代码期间使用 Developers Dev Console进行调试。
设置浏览器以接收服务器发送的事件
接下来,您需要通过运行 init 并传入
<script src=http://cdn.pubnub.com/pubnub-3.4.2.min.js ></script>
<script>(function(){
// Class Setup
var pubnub = PUBNUB.init({ subscribe_key : 'demo' });
// Event Hook Setup
pubnub.subscribe({
channel : "event_feed_channel",
message : function(m){ pubnub.events.fire( m.event, m ) }
});
// RECEIVE the "update" Server Broadcast Event in the Browser
pubnub.events.bind( "update", function(message) {
console.log( "update a <div> with received event: ", m );
} );
})();</script>
请注意,您可能对高级订阅连接选项和事件感兴趣。
注意"update"
事件与ruby 代码:event => "update"
中的消息值是如何相同的。这意味着该事件将根据您提供的名称触发,您需要绑定该事件以触发代码以在您的 Web App 页面上执行。在此触发事件中,您将使用用户希望在其屏幕上实时看到的任何相关详细信息来更新用户界面。
还要注意:channel => "event_feed_channel"
是publish
通道,它必须与subscribe
JavaScript 客户端代码中的通道相同。
如果您想阅读 Ruby GEM 的源代码,可以通过GitHub PubNub 基于 Ruby 的 API获得。
这些是开始使用 Ruby 3.0+ 应用程序并将事件直接从服务器发送到最终用户的基础知识。请注意,这也适用于在 iOS Web 浏览器或 Android 浏览器上运行的移动应用程序。此机制还支持旧版本的 IE。此外,您可以选择考虑将服务器从 Rails 服务器直接发送到原生 iOS 应用程序和原生 Android 应用程序的事件。如果您有任何问题,请在此论坛上向他们提问。