gpt4 book ai didi

node.js - Node JS Socket.IO 发射器(和 redis)

转载 作者:可可西里 更新时间:2023-11-01 11:46:14 26 4
gpt4 key购买 nike

我将给出我正在尝试做的事情的一个小前提。我有一个游戏概念,需要多个玩家围坐在一张 table 旁,有点像扑克牌。

不同播放器之间的正常交互,通过socket.io结合node js很容易处理。

我很难弄明白的是;我有一个 cron 作业正在另一个进程中运行,该进程每分钟获取新信息,然后需要将这些信息发送给每个玩家。由于这是一个不同的过程,我不确定我如何向某些客户发送此信息。

socket.io 确实有这方面的信息,我在下面引用它:

In some cases, you might want to emit events to sockets in Socket.IO namespaces / rooms from outside the context of your Socket.IO processes. There’s several ways to tackle this problem, like implementing your own channel to send messages into the process. To facilitate this use case, we created two modules: socket.io-redis socket.io-emitter

据我了解,我需要这两个模块来执行我之前提到的操作。然而,我不明白的是,当我只需要发送一些消息时,为什么要使用 Redis。

是用来临时存储消息的吗?

任何帮助将不胜感激。

最佳答案

如果您只需要在外部事件后发出,有多种方法可以实现这一点。这取决于您使用什么来获取要发送的新数据:

/*    if the other process is an http post incoming you can use for example
express and use your io object in a custom middleware : */

//pass the io in the req object
app.use( '/incoming', (req, res, next) => {
req.io = io;
})

//then you can do :

app.post('/incoming', (req, res, next) => {
req.io.emit('incoming', req.body);
res.send('data received from http post request then send in the socket');
})

//if you fetch data every minute, why don't you just emit after your job :

var job = sheduledJob('* */1 * * * *', io => {
axios.get('/myApi/someRessource').then(data => io.emit('newData', data.data));
})

关于node.js - Node JS Socket.IO 发射器(和 redis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392048/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com