当前位置: 首页 > 面试题库 >

我可以通过socket.emit发送多少数据?

闽康安
2023-03-14
问题内容

所以我正在使用node.js和socket.io。我有这个小程序,它接受文本框的内容并将其发送到node.js服务器。然后,服务器将其中继回其他连接的客户端。有点像聊天服务,但不完全是。

无论如何,如果用户键入价值2-10k的文本并尝试发送该文本,该怎么办?我知道我可以自己尝试一下,但是我正在寻找一个实用的最佳实践限制,即我可以通过一次发射处理多少数据。


问题答案:

Node和socket.io没有任何内置限制。您不必担心的是消息大小,每秒发送的消息数,连接的客户端数和服务器可用带宽之间的关系-换句话说,没有简单的答案。

让我们考虑一条10 kB的消息。如果连接了10个客户端,则服务器必须推送的数据量为100 kB,这是完全合理的。添加更多的客户端,事情变得越来越苛刻:10
kB * 5,000个客户端= 50 MB。

当然,您还必须考虑协议开销的数量:每个数据包,TCP添加约20个字节,IP添加20个字节,以太网添加14个字节,总计54个字节。假设MTU为1500字节,您正在查看每个客户端8个数据包(不考虑重传)。这意味着您将通过网络向每个客户端发送8 * 54 = 432字节的开销+ 10 kB有效负载= 10,672字节。

10.4 kB * 5000个客户端= 50.8 MB

在100 Mbps链路上, 如果 能够使链路饱和, 理论上最少 需要4.3秒才能向5,000个客户端传递10
kB消息。当然,在丢失数据包和损坏的数据需要重传的现实世界中,这将花费更长的时间。 __

即使非常保守地估计,要向5,000个客户发送10 kB的时间为8秒,在聊天室中每10-20秒就会收到一条消息也可能很好。

实际上,按照重要性的顺序,它归结为几个问题:

  1. 您的服务器将有多少带宽可用?
  2. 可以同时连接多少个用户?
  3. 每分钟将发送多少条消息?

回答完这些问题后,您可以确定基础结构将支持的消息的最大大小。



 类似资料:
  • 我会更好地解释我的问题,我会为我糟糕的英语道歉。我在练习java。net包(这是我下一次大学考试的论据),我正试图更好地控制客户端和服务器设备之间的通信。更准确地说,在调用close()方法到相关套接字之前,我尝试使用TCP连接在3个不同的时间内从服务器向客户端发送3个不同的字符串。我发现我的剧本没有我想象的那么好用。在客户端,我接收所有3个字符串,但只有在我关闭套接字时才接收。相反,我希望在将这

  • 问题内容: 我想对〜1m +个文档进行分类,并为相应模型的输入和输出提供一个版本控制系统。 数据随时间变化: 样本量随时间增加 新功能可能会出现 匿名程序可能会随着时间而改变 因此,基本上“一切”都可能发生变化:观测值,特征和值。我们感兴趣的是使ml模型构建在不使用10/100 + GB磁盘卷的情况下可重现,因为我们保存了输入数据的所有更新版本。目前,数据量约为700mb。 我发现的最有前途的工具

  • 问题内容: 我有一个内置的javascript,它可以执行以下操作:通过ajax-> php-> sql获取内容,并在单击内容后在index.php上显示它,将显示新内容。 现在,我想拥有一个在将内容单击到php之后发送数据的函数,该函数将在db中执行某些操作。如何创建将发送数据的功能?谢谢! 这是我的显示内容的代码: }); }` 问题答案: 您可以通过在jQuery.ajax 设置中包含值,将

  • 本文向大家介绍我可以在JavaScript cookie中存储多少数据?,包括了我可以在JavaScript cookie中存储多少数据?的使用技巧和注意事项,需要的朋友参考一下 以下是您可以存储在JavaScript cookie中的日期的详细信息- 网页浏览器 最大Cookie 每个Cookie的最大大小 谷歌浏览器 180 4096字节 火狐浏览器 150 4097字节 歌剧 180 409

  • 问题内容: 我只碰了芹菜和Java两天。:( 现在,我有一个Java客户端通过Rabbitmq发送任务的任务。芹菜将是处理任务的工人。 我知道Python-> rabbitmq-> celery很容易。但是我可以通过java-> rabbitmq-> celery来做到这一点吗? 草案的想法是通过JSON序列化Java函数,然后通过Rabbitmq发送,然后通过celery处理。 最好有示例代码并

  • 我正在开发一个应用程序,用户必须从列表中选择任意数量的国家,我必须通过多部分发送所选的名称。 但是,在所有的尝试中,我都得到了错误retrofit.retrofiterror:Part body不能为null。 我还提到,ChangeLog for refitfit提到“new:Support iterable and array参数使用OKHTTP的”,但是经过深入研究,我发现给定的示例相当混乱