Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 避免Socket.io中出现多个客户端的Node Express设计_Node.js_Express_Socket.io - Fatal编程技术网

Node.js 避免Socket.io中出现多个客户端的Node Express设计

Node.js 避免Socket.io中出现多个客户端的Node Express设计,node.js,express,socket.io,Node.js,Express,Socket.io,构建一个包含帖子和评论的简单应用程序 用户点击一篇文章并添加一条评论,每个查看同一篇文章的人都会看到添加到文章中的新评论。全部通过Socket.io完成 我是这样实例化它的: // app.js var io = require('socket.io').listen(app.listen(app.get('port'))); var chat = io.of('/p/' + id).on('connection', function(socket) { socket.on('ad

构建一个包含帖子和评论的简单应用程序

用户点击一篇文章并添加一条评论,每个查看同一篇文章的人都会看到添加到文章中的新评论。全部通过Socket.io完成

我是这样实例化它的:

// app.js
var io = require('socket.io').listen(app.listen(app.get('port')));

var chat = io.of('/p/' + id).on('connection', function(socket) {
      socket.on('addComment', function(data) {
        var content = data.comment;
        var comment = new commentModel({
          user: req.user._id,
          post_id: id,
          content: content
        });
        comment.save(function(err, doc) {
          if (err) {
            return next(err);
          }
          commentModel.findById(doc._id).populate('user').exec(function(err, comment) {
            chat.emit('newComment', {
              comment: comment
            });
          });
        });
      });
    });

// client-side JS
self.socket_io = io.connect(window.location.href);
self.socket_io.on('newComment', function(data) {
    // do stuff with the new comment
};
第一次访问页面时,注释会提交一次(一个套接字连接),但是,如果我刷新页面并提交新注释,则会创建两条注释(每个连接的客户端一条)

知道我哪里出错了吗?

知道 commentModel.findById

内德 comment.findByID

您可以尝试以下几种:

管理服务器上的套接字会话:
socketio\u会话[user\u id]。推送(会话)
。 将允许您访问为特定用户连接的所有会话。在存储新会话之前,您可能不需要存储每个用户的会话列表,只需存储最新会话,并强制断开现有会话的连接

--

下面列出了一些事情,包括更改强制新连接的配置

--

这也可能有用,解释了如何使用express:

我认为这可能会帮助您在每次用户刷新时创建新的套接字连接


您的意思是两条注释被写入数据库或两条注释显示在页面上?嗯,两条都是……但它们也被保存到数据库中