如何在rails中获得类似Facebook的通知系统

时间:2015-08-09 20:38:20

标签: ruby-on-rails facebook ruby-on-rails-4 notifications diaspora

嘿,如何在rails中建立像Facebook或侨民这样的通知系统。

我曾尝试制作活动Feed但这不是我想要的东西我想要一个像这个网站一样完全相同的功能。

我有一个简单的应用程序有两种类型的用户买家和卖家

我想在买家对其产品发表评论时通知卖家。

2 个答案:

答案 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使用彗星技术做到了。

以下是一些有用的链接

Link1

Link2

Link3

这是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

你可以根据自己的需要采用这种方法