实时网络通知服务

时间:2017-08-30 14:47:22

标签: node.js sockets notifications real-time

我一直在尝试构建(我自己)一个实时通知系统。

过去两天我搜索了很多,我相信最好和最简单的解决方案是使用node.jssocket.io来开发它。但我不知道这些都没有。

node.jssocket.io是一个很好的做法吗?

规格

  • 将存储在DB中的两组用户(简单用户和管理员)
  • 当一个简单的用户发帖时,该帖子将被发送给(所有)管理员
  • 如果管理员回复帖子,则只会向特定用户发送回复

是否有任何简单的示例或教程才能开始? 如果有人可以发布任何例子,那将对我很有帮助..

1 个答案:

答案 0 :(得分:2)

对于这样的任务,我建议您使用MongoDB和Ajax。它更简单,您只需在客户端(html)添加ajax代码并在服务器端处理请求。

简单示例:

普通用户发送消息

html档案

$.ajax({
  method: "POST",
  url: "http://myUrl.com/myPath",
  data: { message: "Hello this is a message" },
  contentType: "application/json",
  success: function(data){
  //handle success
  },
  error: function(err){
  //error handler  
  }    
})

服务器端

app.post('/myUrl', function(req, res){

   if(req.body){
     //message handlers here
   }
   Users.find({type: 'admin'}, function(err, users){
     var message = req.body.message;
     for(var i = 0; i < users.length, i++){
       //make sure you have the type as adminPending from the schema in MongoDB
       message.save(//save this message to the database); //save this message to the database as 'adminPendingType'
     }
   })
})

来到管理员,让他们知道他们收到了一条消息,你需要每秒进行一次ajax调用,这就是facebook / twitter处理大多数事情的方式。因此,如果他们有一个新的收件箱,基本上一次又一次地询问服务器。

Admin html

function messageGetter(){

    $.ajax({
      method: "POST",
      url: "http://myUrl.com/didIreceiveAmessage",
      data: { message: "Hello this is a message" },
      contentType: "application/json",
      success: function(data){
        //success handler with data object
        if(data['exists']== "true"){
          //add your data.message to the html page, so it will be seen by the user
        }
      },
      error: function(err){
      //error handler  
      }    
    })

}

setInterval(messageGetter, 1000); //check it each second

服务器端

app.post('/myUrl', function(req, res){

   if(req.body){
     //message handlers here
   }
   Message.find({type: 'adminPending'}, function(err, messages){
     //find the admin info from cookies here
     if(messages.length == 0){
      console.log("No messages pending");
      return false; //exit the request
     }else{
      var admin = req.session.admin.id;  //admin user 
      //handle stuff with admin
      messages['exists'] == true;
      res.send(messages);
      //change the type of message from adminPending to adminSeen
      return false; //exit the message
     }
   })
})

这只是一个简单的例子,介绍如何使用带有Node的ajax和MongoDB。当然编码会更长,因为你必须处理更改消息类型并保存它们。