Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 节点JS Socket.IO发射器(和redis)_Node.js_Redis_Socket.io_Socket.io 1.0_Socket.io Redis - Fatal编程技术网

Node.js 节点JS Socket.IO发射器(和redis)

Node.js 节点JS Socket.IO发射器(和redis),node.js,redis,socket.io,socket.io-1.0,socket.io-redis,Node.js,Redis,Socket.io,Socket.io 1.0,Socket.io Redis,我将给出一个小前提,说明我要做什么。我有一个游戏的概念,需要多个玩家围坐在一张桌子旁,有点像扑克 通过socket.io和node js可以轻松处理不同玩家之间的正常交互 我很难弄明白的是;我有一个cron作业,它在另一个进程中运行,该进程每分钟都会获取新的信息,然后需要将这些信息发送给每个玩家。由于这是一个不同的过程,我不确定如何向某些客户发送此信息 socket.io确实有这方面的信息,我在下面引用它: 在某些情况下,您可能希望从Socket.IO进程的上下文之外向Socket.IO命名空间

我将给出一个小前提,说明我要做什么。我有一个游戏的概念,需要多个玩家围坐在一张桌子旁,有点像扑克

通过socket.io和node js可以轻松处理不同玩家之间的正常交互

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

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

在某些情况下,您可能希望从Socket.IO进程的上下文之外向Socket.IO命名空间/文件室中的套接字发送事件。 有几种方法可以解决这个问题,比如实现您自己的通道来向流程发送消息。 为了简化此用例,我们创建了两个模块: socket.io-redis socket.io-emitter

据我所知,我需要这两个模块来完成我前面提到的工作。然而,我不明白的是,当我只需要发送一些消息时,为什么redis会出现在等式中

它只是用来暂时存储消息吗


任何帮助都将不胜感激

在提供这些功能的
socket.io
的情况下,我了解到您实际上需要这两种功能。然而,这不一定是你想要的。但是,是的,
redis
可能只是用来临时存储数据,它与消息队列的功能非常接近,在这方面也做得非常好

您的cron现在不需要消息队列或类似的行为


不过,我的建议是将cron作为
child\u进程
hook挂接到它的可读流上,然后直接推送到套接字中,并在进程中运行一些节点包

如果cron作业进程也是一个nodejs进程,则可以通过redis.io pub sub-client机制交换数据

让我知道您的cron作业流程是什么,以防发布子机制中需要进一步的帮助


redis是socket.io使用的内存存储区之一(在您配置的情况下)

只有当您具有多服务器配置(群集)以在这些node.js实例之间建立连接和房间/命名空间同步时,才必须使用redis。它与存储数据无关。在本例中,它作为发布/订阅机器工作

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

/*如果另一个进程是http post传入,您可以使用
在自定义中间件中表达并使用io对象:*/
//在req对象中传递io
应用程序使用(“/传入”,(请求、恢复、下一步)=>{
请求io=io;
})  
//然后你可以做:
app.post('/incoming',(请求、回复、下一步)=>{
请求io.emit('传入',请求正文);
res.send('从http post请求接收的数据,然后在套接字中发送');
})
//如果您每分钟都获取数据,为什么不在工作结束后发出:
变量作业=调度作业('**/1****',io=>{
get('/myApi/someResource')。然后(data=>io.emit('newData',data.data));

})
我计划使用集群创建多个(socket.io)进程,我希望这些进程不会导致任何异常。我不知道从这些过程中分叉是否是最好的主意。我希望至少有10k-50k并发连接。所以我需要通过集群的多个进程来处理流量。