Py学习  »  Redis

socket.io、redis、clusters,并通过确认发送到单个socket

Gen • 4 年前 • 561 次点击  

当只运行一个实例时,底部的代码运行良好,如果我使用更传统的

io.sockets.to(clientId).emit('Message', Object);

这也适用于socket.io/redis/cluster场景。在这种情况下,我需要客户机的响应,但是,我发现,假设集群中有两个实例,我有50%的机会将消息实际到达特定的socketid。同样,当将此限制为一个运行实例时,我没有看到这个问题,因此它似乎与redis/cluster方面有关。弄不清我在这里缺少什么。

var io = require('socket.io')(server);
io.set('transports', ['websocket']);
const redisAdapter = require('socket.io-redis');
io.adapter(redisAdapter({ host: SERVER, port: PORT }));

var data = upload.single('data');
app.post('/getData', data, function(req, res) {
  var clientId = req.body.targetId

  io.in(clientId).clients((err, clients) => {
    if (err) {
      res.sendStatus(500)
      console.log(err)
      return
    }
    if (!clients) return
    var object = {
        token: req.body.dataToken,
        patid: req.body.patId
    }
    var client = clients[0]

    console.log(client) //client will console log just fine here as the socketid

    io.sockets.connected[client].emit('FOO', object, response=> {  
      res.send(JSON.stringify({"data": response}))
    })
  })
})

编辑:

在对对象进行了一些深入研究之后,会发现io.sockets.connected是特定于该实例的,这与我看到的一致。我想我的问题是,有没有办法使用socket.io-redis发出回调?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/48359
 
561 次点击