嘿,如何在rails中建立像Facebook或侨民这样的通知系统。
我曾尝试制作活动Feed但这不是我想要的东西我想要一个像这个网站一样完全相同的功能。
我有一个简单的应用程序有两种类型的用户买家和卖家
我想在买家对其产品发表评论时通知卖家。
答案 0 :(得分:2)
您在这里看到的是server push
实施。这意味着当服务器中发生某些通知/操作时,它应该将通知推送到您的rails应用程序。与@manju的答案不同的是,它提出了一个基于客户端浏览器的解决方案,将定期调用服务器以获取新通知。
有两种主要方法可以做到这一点。
1 - 使用某些第三方SASS解决方案。(简单方法,但需要花钱;))
Fire base,允许您向客户端发送推送通知。
pusher是另一家提供相同类型的功能主义者。
阅读他们的文档,通常他们每个都有宝石,您可以轻松地集成到您的rails应用程序。
2 - 实施您自己的推送服务器
您可以使用rails实现自己的推送服务器,并集成到您的应用中。
Faye是一个选项,
但更多现有的东西是 Rails5 会有行动电缆,试图解决同样的问题。 action cable gem
并且有文章显示使用rails4应用程序的动作电缆(你不必等到rails5出来),但我还没有亲自使用它。
HTH
答案 1 :(得分:1)
Facebook使用彗星技术做到了。
以下是一些有用的链接
这是facebook如何做的理论
Facebook的工作原理是轮询服务器以进行任何更改。
Facebook页面会向服务器发出ajax请求,而ajax请求会有很长时间
但是在服务器API的服务器端,如果发生了任何变化,它将不断地轮询数据库服务器,不断检查数据库中的活动日志表。如果发现更改,它将返回结果直到然后它会轮询数据库
一旦Ajax请求完成,它将以递归方式再次尝试。
以下是代码段 - 客户端
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
});
以下是服务器端的代码段:
while(!has_event_happened()) {
sleep(5);
}
echo json_encode(get_events());
您可以更详细地找到它here
你可以根据自己的需要采用这种方法