【发布时间】:2015-08-09 20:38:20
【问题描述】:
嘿,如何在 Rails 中制作像 Facebook 或散居地这样的通知系统。
我曾尝试制作活动提要,但这不是我想要的,我想要一个与此网站完全相同的功能。
我有一个简单的应用,里面有买家和卖家两种类型的用户
我想在买家对其产品发表评论时通知卖家。
【问题讨论】:
标签: ruby-on-rails facebook ruby-on-rails-4 notifications diaspora
嘿,如何在 Rails 中制作像 Facebook 或散居地这样的通知系统。
我曾尝试制作活动提要,但这不是我想要的,我想要一个与此网站完全相同的功能。
我有一个简单的应用,里面有买家和卖家两种类型的用户
我想在买家对其产品发表评论时通知卖家。
【问题讨论】:
标签: ruby-on-rails facebook ruby-on-rails-4 notifications diaspora
您在这里看到的是server push 实现。这意味着当服务器中发生某些通知/操作时,它应该将通知推送到您的 Rails 应用程序。 @manju 的答案的不同之处在于,它提出的基于您的客户端浏览器的解决方案将定期调用服务器以获取新通知。
有两种主要方法可以做到这一点。
1 - 使用一些第三方 SASS 解决方案。(简单的方法,但要花钱;))
Fire base ,允许您向客户端发送推送通知。
pusher 是另一个提供相同类型功能主义者的提供商。
阅读他们的文档,通常他们每个人都有可以轻松集成到 Rails 应用程序的宝石。
2 - 实现自己的推送服务器
您可以使用 Rails 实现自己的推送服务器,并集成到您的应用中。
Faye 是一个选项,
但更令人兴奋的是 Rails5 将有 Action Cable 试图解决同样的问题。 action cable gem
还有文章展示了带有rails4应用的action cable(你不必等到rails5出来),但我还没有亲自使用过。
HTH
【讨论】:
Facebook 使用 彗星技术。
这里有一些有用的链接
这是 facebook 的原理
Facebook 的工作原理是轮询服务器以获取任何更改。
Facebook 页面将向服务器发出 ajax 请求,并且 ajax 请求将超时
但是在服务器端的 API 中,它会通过不断检查数据库中的活动日志表来不断轮询数据库服务器是否有任何变化......如果发现变化,它将返回结果直到然后它将轮询数据库
一旦 Ajax 请求完成,它将递归重试。
这是一个代码 sn-p - 客户端
function doPoll() {
$.get("events.php", {}, function(result) {
$.each(result.events, function(event) { //iterate over the events
//do something with your event
});
doPoll();
//this effectively causes the poll to run again as
//soon as the response comes back
}, 'json');
}
$(document).ready(function() {
$.ajaxSetup({
timeout: 1000*60//set a global AJAX timeout of a minute
});
doPoll(); // do the first poll
});
这是服务器端的code-sn-p:
while(!has_event_happened()) {
sleep(5);
}
echo json_encode(get_events());
你可以找到它的详细信息here
您实际上可以根据自己的需要采用这种方法
【讨论】: