嘿,如何在 Rails 中制作像 Facebook 或侨民这样的通知系统。
我曾尝试制作活动提要,但这不是我想要的,我想要一个与此网站完全相同的功能。
我有一个简单的应用程序有两种类型的用户买家和卖家
每当买家评论他们的产品时,我想通知卖家。
嘿,如何在 Rails 中制作像 Facebook 或侨民这样的通知系统。
我曾尝试制作活动提要,但这不是我想要的,我想要一个与此网站完全相同的功能。
我有一个简单的应用程序有两种类型的用户买家和卖家
每当买家评论他们的产品时,我想通知卖家。
你在这里看到的是一个server push
实现。这意味着当服务器中发生某些通知/操作时,它应该将通知推送到您的 Rails 应用程序。@manju 答案的不同之处在于,它提出的基于您的客户端浏览器的解决方案将定期调用服务器以获取新通知。
有两种主要方法可以做到这一点。
1 - 使用一些第三方 SASS 解决方案。(简单的方法,但要花钱;))
Fire base,允许您向客户端发送推送通知。
pusher是另一个提供相同功能的提供商。
阅读他们的文档,通常他们每个人都有可以轻松集成到 Rails 应用程序的 gem。
2 - 实现自己的推送服务器
您可以使用 Rails 实现自己的推送服务器,并集成到您的应用程序中。
Faye是一种选择,
但更令人兴奋的是Rails5将有Action Cable试图解决同样的问题。动作电缆宝石
还有一些文章展示了带有rails4应用程序的动作电缆(你不必等到rails5出来),但我还没有亲自使用过。
高温高压
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());
你可以在这里找到它的详细信息
您实际上可以根据自己的需要采用这种方法