将socket.io集成到REST API中

时间:2016-07-19 20:48:25

标签: ios node.js mongodb rest websocket

所以我正在构建iOS应用,并且我已经开始构建REST API w / nodejsexpress,& mongodb。我目前正在向我的应用添加即时消息和通知,因此我一直在websocketssocket.io)上阅读。经过大量的阅读,老实说我无法理解这个概念以及如何集成到我的API中。

例如,我有这条API路线:

// create new message
app.post('/newmessage', function (req, res, next) {

  if (!req.body.message ) {
    res.json({success: false, msg: 'You must type a message.'});
    console.log('message: ' + req.body.message);

  } else {

     var newMessage = new Message({
     fromUser: ObjectID(req.params.id),
     toUser: ObjectID(req.params.id),
     message: String,

     }); 

     // save new message
      newMessage.save(function(err) {
      if (err) {
       res.json({success: false, msg: 'message was unsuccessful.'});
      } else {
       res.json({success: true, msg: 'message sent!'});
       console.log(newMessage.createdAt);
       console.log(newMessage.updatedAt);

      }

    });

  }

});

如何将socket.io集成到此特定呼叫中?我会创建一个Socket.js文件并从那里导出?后端根本不是我的事情,所以如果这是一个糟糕的问题我会道歉。谢谢!

1 个答案:

答案 0 :(得分:6)

使用webSocket或socket.io连接进行即时消息或服务器推送通知的一般体系结构如下:

  1. 每个客户端都与服务器建立webSocket或socket.io连接。
  2. 服务器正在侦听这些传入连接,并在初始连接上使用某种cookie来识别正在连接的用户。
  3. 然后,服务器会在用户会话期间保持这些连接处于打开状态,并侦听其上的传入消息。
  4. 在任何时候,如果服务器希望向客户端发送通知,它可以找到属于所需客户端的连接,并在该连接上发送消息。
  5. 客户端将监听传入的消息,并将接收该消息,然后可以对其进行处理。
  6. 对于即时消息,客户端会向服务器发送一条消息,该消息实质上是说"将此消息发送给Bob" (其中Bob是系统上某些其他用户的一些用户ID)。服务器将从另一个客户端接收该消息,然后找到Bob的连接并在该连接上将消息发送给Bob。
  7. 我建议使用socket.io,因为它在webSockets之上提供了许多有用的功能,并且应该有适用于您将使用的所有平台的socket.io库。 socket.io documentation包含一个可以进行聊天的演示应用,可以让您了解socket.io的工作原理。