Node.js 避免Socket.io中出现多个客户端的Node Express设计
构建一个包含帖子和评论的简单应用程序 用户点击一篇文章并添加一条评论,每个查看同一篇文章的人都会看到添加到文章中的新评论。全部通过Socket.io完成 我是这样实例化它的: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
// 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:
我认为这可能会帮助您在每次用户刷新时创建新的套接字连接
您的意思是两条注释被写入数据库或两条注释显示在页面上?嗯,两条都是……但它们也被保存到数据库中