使用 socket.io 更新使用通知
Posted
技术标签:
【中文标题】使用 socket.io 更新使用通知【英文标题】:update use notifications live with socket.io 【发布时间】:2018-04-29 21:00:57 【问题描述】:您好,我正在尝试使用套接字 io 从数据库获取用户通知。 这是我尝试获取数据并将其发送回用户的方式
if(req.user)
req.io.sockets.on('connection', function(socket)
setInterval(getNotf,1000)
function getNotf()
User.findOne(email:req.user.email)
.then(user=>
messages=(user.notifications);
console.log(messages)
socket.emit('output', messages);
);
);
这种方式的问题是消息发送给所有连接的用户。我怎样才能将它们只发送给当前用户?
【问题讨论】:
【参考方案1】:您可以使用其 Id 将消息发送到具有此连接的套接字:
io.to(socket.id).emit('output', messages)
在您的连接事件监听器中:
req.io.sockets.on('connection', function(socket)
setInterval(getNotf,1000)
function getNotf()
User.findOne(email:req.user.email)
.then(user=>
messages=(user.notifications);
console.log(messages)
io.to(socket.id).emit('output', messages)
);
我有一个这样的连接的全局实例:
var serverhttp = http.createServer(<optionshttp>, app).listen(<port>);
var io = require('socket.io').listen(serverhttp);
作为 2 个连接的测试,您可以试试这个:
var clients = [];
req.io.sockets.on('connection', function(socket)
clients.push(socket.id);
setInterval(getNotf,1000)
function getNotf()
User.findOne(email:req.user.email)
.then(user=>
messages=(user.notifications);
console.log(messages)
console.log("socket ID :",socket.id)
io.to(clients[0]).emit('output', "user1")
io.to(clients[1]).emit('output', "user2")
//or
//io.sockets.connected[clients[0]].emit('output', "user1")
//io.sockets.connected[clients[1]].emit('output', "user2")
);
【讨论】:
我也试过了,但如果用户已连接,消息也会发送到其他连接 您能否尝试记录您的连接的 socket.id,console.log("socket ID :",socket.id)。请告诉我你是如何测试这个多连接用例的? 这里是客户端的代码 var socket = io.connect(); socket.on("output", data => $("#temp").text(data.length) console.log(data) 对吗? 我会请你做这个作为测试。在客户端: var socket = io.connect("localhost:<port>") 它与来自服务器的 http://: io.sockets.connected[socket.id].emit('output', messages) 并请告诉我你的 package.json 文件中的 socekt.io 版本,并在我问你的服务器连接事件后记录 socket.id 你能试试我在我的答案中编辑的测试部分并告诉我你得到了什么以上是关于使用 socket.io 更新使用通知的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Express、AngularJS、Socket.io 广播和获取通知?