Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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最佳socket.io实践(请求-响应vs广播)_Node.js_Mongodb_Socket.io - Fatal编程技术网

Node.js最佳socket.io实践(请求-响应vs广播)

Node.js最佳socket.io实践(请求-响应vs广播),node.js,mongodb,socket.io,Node.js,Mongodb,Socket.io,我是node.js/socket.io的新手,可能问的方式不对,甚至问的问题也不对 我的应用程序的目标是从API获取数据,将其转换为JSON对象并将其存储在mongodb中。然后在需要时向客户端提供数据。我考虑过两种可能性,想知道最好的做法是什么。我的第一个想法是每隔一段时间向所有连接广播数据库中的所有条目。另一个想法是让客户机向服务器请求它需要的数据,然后将请求的数据发送给客户机 数据库中存储的数据大约有100个条目。大约每30秒从API更新一次数据。如果选择方法1,数据将每5-10秒广播一次

我是node.js/socket.io的新手,可能问的方式不对,甚至问的问题也不对

我的应用程序的目标是从API获取数据,将其转换为JSON对象并将其存储在mongodb中。然后在需要时向客户端提供数据。我考虑过两种可能性,想知道最好的做法是什么。我的第一个想法是每隔一段时间向所有连接广播数据库中的所有条目。另一个想法是让客户机向服务器请求它需要的数据,然后将请求的数据发送给客户机

数据库中存储的数据大约有100个条目。大约每30秒从API更新一次数据。如果选择方法1,数据将每5-10秒广播一次。如果选择方法2,则数据将在请求时发送。客户端将有不同的情况,在这些情况下,并非始终需要所有数据。客户端必须经常请求数据,以确保数据“新鲜”

所以我的问题是,最好的做法是每x秒广播一个大数据块,或者在请求时广播较小的数据块

如果这不合理,很抱歉。
谢谢您的时间。

DDP协议无疑是一种有趣的方式,但它可能有点过头了。更简单的解决方案是从方法1和方法2中选择最佳方案。如果延迟不是那么重要,并且您有空闲带宽,那么当新数据到达时,您可以向所有客户端广播“更新”消息。客户端考虑更新是否影响它并下载它所需的数据

更复杂、更有效的方法是订阅程序,非常类似于DDP。对于较小的项目,您可以在一段时间内自行实施。这就是它的工作原理:

  • 客户端订阅一块数据
  • 服务器将此区块发送到客户端,并记住哪些客户端订阅了什么
  • 如果区块被更新,服务器将遍历订阅列表并将新数据发送给订阅服务器
  • 客户端可以随时通过发送特殊消息、断开连接(或者可选地通过订阅不同的区块)来取消订阅

我所说的块指的是如何识别某些数据的任何方式。它可以是记录ID、时间范围、过滤器或任何在您的项目中有意义的东西。

我建议您查看的发布/订阅系统及其应用程序。其思想是服务器发布某些数据,然后客户端订阅其中的一些数据。服务器向客户端发送它所需的数据,只有在实际发生更改时才会发送更新。感谢您的建议,我将查看它。整个系统看起来有点重,但是实现DDP协议非常有趣。谢谢你的回答。我正在考虑使用“房间”实现来区分哪些用户得到了什么。您知道这是否是存储客户端以获取特定数据的好方法吗?对不起,我不知道rooms实现是关于什么的。