我想知道在我的网站上实时推送内容的方法。我已经研究了一段时间,我意识到有很多方法可以做这项工作。
首先要考虑的是:我有一个带有社交functionality..one的Rails3App,我想要实现的功能是在创建新活动时通知我的用户。我的第一种方法是实现SSE和一个控制器,该控制器在数据库中搜索上次加载的活动之后的新注册表。
这可以工作,但这需要太多的数据库查询,当所有我需要的是推送活动到所有活动用户(与该活动相关),当一个新的活动被创建,而不需要做数据库查询。
我的第二种方法是创建一个指向控制器和观察者的路由,以便在创建新活动时捕获,稍后将创建的当前活动传递给控制器,最后通过SSE呈现部分活动。
我的问题来了..如何将观察者与控制器连接起来,并将当前要呈现的活动传递给它?在这里,我是否可以使用其他类型的控制器,如Metal controller,甚至Abstract Controller?
在这一点上,我意识到这可能是完成这项工作的另一种方法。如果我能找到一种不用在另一种语言或框架中开发它的方法,那就太好了。我认为应该有一个宝石,可以更容易地做实时应用程序..你认为如何??我在正确的道路上,或者我应该做什么来实现这一点??非常感谢!
发布于 2013-03-16 03:16:02
使用PubNub实时推送Rails 3.0+内容
为了安全可靠地在你的网站或web应用上向你的用户推送实时更新,如你所说,有许多选项可用,也有许多细微的差别需要考虑。和我将在这里为你的Rails 3.0+应用程序和网站提供一个简单的入门指南来帮助你入门。首先,您需要运行gem install pubnub,这是一个称为PubNub的实时组件,它允许您将通知直接发送给网站和应用程序上的目标用户或一组用户。这允许您只针对那些在线并且对从Rails服务器接收通知感兴趣的人。您可以将其视为高效的服务器发送事件,不需要在服务器上执行DB Lookup或其他资源密集型操作。
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应用程序发送消息
现在,在准备好pubnub类的Rails App中,您可以发送任何类型的JSON数据类型,包括字符串、数字、数组和字典/对象:
a Number 123
1,2,3
”}<
下面的代码将向您展示将消息从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应用程序中使用 GEM时,您可以将此过程视为PubNub SSE(服务器发送事件)。
使用PubNub GEM,您实际上是将事件从服务器直接发送到用户的浏览器/应用程序。它消除了对客户端定期AJAX请求的需要。这是因为您仅在新信息可用时才向用户发送数据。你也可以通过访问主页来了解consider using more PubNub Real-time Network features like Presence and Storage/Playback特性的更多细节。在集成到Rails代码期间,如果需要,还可以使用use the 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>注意,您可能会对Advanced Subscribe Connectivity Options and Events感兴趣。
注意"update"事件与ruby代码中的:event => "update"消息值是如何相同的。这意味着事件将基于您提供的名称触发,并且您需要绑定事件以触发代码在您的Web App页面上执行。在此触发事件中,您将使用用户希望在其屏幕上实时看到的任何相关详细信息来更新用户界面。
还要注意,:channel => "event_feed_channel"是publish通道,它必须与JavaScript客户端代码中的subscribe通道相同。
如果你想阅读Ruby GEM的源代码,可以通过GitHub PubNub Ruby-based APIs获得。
这些是开始使用并将事件直接从您的服务器发送给最终用户的基础。注意:这也适用于在安卓网络浏览器或iOS浏览器上运行的移动应用程序。此外,此机制还支持旧版本的IE。此外,您可以有选择地考虑服务器将事件从Rails服务器直接发送到Native iOS应用程序和Native Android应用程序。如果你有任何问题,请在这个论坛上问他们。
发布于 2014-07-23 10:56:48
我已经构建了一个realtime rails gem和一个示例实时服务器(node.js),它可以在不需要付费的第三方(如Pusher或PubNub )的情况下轻松地进行实时消息传递。它可以与Rails 3+一起使用。
https://stackoverflow.com/questions/15419667
复制相似问题