你好我正在尝试使用socket io从db获取用户通知。 这是我如何尝试获取数据并将其发送回用户
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);
});
}
});
} 这种方式的问题是发送给所有连接用户的消息。我可以只将它们发送给当前用户吗?
答案 0 :(得分:0)
您可以使用其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")
});