Tag: 低延迟

将接收的实时dynamic数据推送给10,000个用户?

我正在对我正在开发的一个新项目提出一些指导,要求低延迟和高并发性。 该项目涉及从第三方供稿接收实时数据,经过一些基本处理和存储后,将这些值发送给网站上当前活动的所有用户。 数据通过HTTP Push到达,我目前的计划是使用Node.js接收这些数据,然后通过algorithm运行数据,然后更新某种数据库中的相关数据。 最后,更新通过websocket发送给网站的所有连接用户。 现在,我试图让这个可扩展性能够同时处理超过10,000个连接的用户,全部通过websocket连接,并且每3秒发送一次更新。 鉴于每个用户在此期间都可以与Web应用程序进行交互,这将导致许多请求来回。 现在,除了我所拥有的高层次的基本概念之外,决定将Ruby on Rails作为网站框架和节点j来处理它的“活力” – 我有点卡住了。 我不知道要使用什么样的数据库(我想这将是一个非关系数据库快速存储),我不知道如何构build这样一个设置的具体细节,以及如何实现逻辑。 所以我的问题是: 为了实现我的目标,我该如何构build这样一个应用程序,以及为了使其具有可伸缩性和实时性,我需要了解哪些内容? 非常感谢您的帮助。

Node.js,Socket.io,Redis pub / sub大容量,低延迟困难

当连接socket.io/node.js和redis pub / sub以试图创build一个由可以处理多个传输的服务器事件驱动的实时Web广播系统时,似乎有三种方法: 'createClient'一个redis连接并订阅频道。 在socket.io客户机连接上,将客户机join到socket.io机房。 在redis.on(“message”,…)事件中,调用io.sockets.in(room).emit(“event”,data)分发给相关房间中的所有客户端。 像如何在socket.io中重用redis连接? 'createClient'是一个redis连接。 在socket.io客户端连接上,将客户端join到socket.io房间并订阅相关的redis通道。 在客户端连接closures和接收到消息调用client.emit(“event”,data)中包含redis.on(“message”,…)以引发特定客户端上的事件。 就像在使用socket.io中的RedisStore的例子中的答案一样 按照socketio-spec协议,使用RedisStore烘焙到socket.io中并从Redis中的单个“dispatch”通道“广播”。 Number 1允许为所有客户端处理Redis子和关联事件一次。 Number 2提供了一个更直接的挂钩到Redis pub / sub。 3号更简单,但对消息传递事件的控制很less。 然而,在我的testing中,所有连接的客户端都超过1个,performance出意外的低性能。 有问题的服务器事件是尽快发布到redis通道的1,000条消息,尽快分发。 性能是通过连接客户端的时间来衡量的(socket.io-client基于日志时间戳进入Redis列表进行分析)。 我猜测,在选项1中,服务器接收到消息,然后将其顺序写入所有连接的客户端。 在选项2中,服务器多次接收每条消息(每个客户端订阅一次)并将其写入相关的客户端。 在任何情况下,服务器都不会到达第二个消息事件,直到它传达给所有连接的客户端。 情况明显加剧,并发性上升。 这似乎与堆栈function的智慧不符。 我想相信,但我正在挣扎。 这种情况(大量消息的低延迟分布)只是没有这些工具的选项(还?),还是我错过了一个把戏?