通过TCP连接在Node.js中接收大数据包时遇到问题。 似乎缓冲区中的上限设置为大约55kB。当我收到大量数据(大约70-80k)时,它会将这些数据分开。
现在,我使用UDP套接字,我知道如何期待on('data', function(){})
事件以及如何在最终收到消息时期望on('end', function(){})
,TCP的问题是我从不收到on('end', function(){})
事件,服务器(在C#中)从不发送FIN数据包。这是因为我需要让套接字保持活动状态(我们不想将其关闭)。
有没有某种方法可以从C#发送FIN数据包到Node.js,而不必关闭/关闭套接字?
或者,替代地,是某种在节点内部触发on('end', function(){})
事件的方法吗?
问候。
修改 为了补充问题,例如我有2个客户端试图通过TCP套接字获取信息。一个首先连接,并得到一个巨大的请求(这里的大小没有问题)。
但是在处理此请求时,另一个请求执行相同的请求,因为TCP连接是通过节点,它们使用相同的套接字。 有没有办法区分请求?或者我是否必须为TCP服务器的每个请求设置一个套接字?
答案 0 :(得分:5)
UDP是面向数据包的。您可以发送适合数据包的数据,最多可以发送65,507字节的绝对数据。这是火灾和遗忘,没有处理丢包或重新排序的内在机制。
TCP是面向流的。您的数据将根据几个因素(包括数据量和传输速率)分成数据包。这大多超出了您的控制范围,并由TCP / IP堆栈管理。您得到的回报是有序的数据包序列和一定程度的容错(保证正确的数据包排序,并且TCP / IP协议栈检测到丢失/重复的数据包,并对应用程序代码透明地处理)。
如果您在节点中的套接字级别工作,几乎肯定会得到多个回调,每个回调都包含一大块数据。你可以把它缝合在一起。这是一件好事 - 这意味着您可以定义自己的机制来识别消息边界,数据压缩等等。
答案 1 :(得分:1)
我有一个类似的问题,看起来你需要采用两种技术:
答案 2 :(得分:-1)
我会说尝试缓冲并附加