Node.js TCP传入消息拆分为包

Gon*_*ira 1 c# sockets tcp node.js

通过TCP连接在Node.js中接收大数据包时遇到问题.似乎缓冲区中的上限设置为大约55kB.当我收到大量数据(大约70-80k)时,它会将这些数据分开.

现在,我使用UDP套接字,我知道如何期待on('data', function(){})事件以及如何期望on('end', function(){})最终收到消息,TCP的问题是我从未收到过on('end', function(){})事件,服务器(在C#中)从未发送过FIN包.这是因为我需要保持套接字处于活动状态并且正在进行(我们不想将其关闭).

有没有某种方法可以发送FIN数据包,从C#到Node.js,而不必关闭/关闭套接字?

或者,替代地,是某种触发on('end', function(){})节点内部事件的方式?

问候.

编辑: 为了补充问题,例如我说有2个客户端试图通过TCP套接字获取信息.一个首先连接,并获得一个巨大的请求(这里的大小没有问题).

但是在处理此请求时,另一个请求执行相同的请求,因为TCP连接是通过节点,它们使用相同的套接字.有没有办法区分请求?或者我是否必须为TCP服务器的每个请求设置一个套接字?

Dar*_*ren 5

UDP是面向数据包的.您可以发送适合数据包的数据,最多可以发送65,507字节的绝对数据.这是火灾和遗忘,没有处理数据包丢失或重新排序的内在机制.

TCP是面向流的.您的数据将根据几个因素(包括数据量和传输速率)分成数据包.这大多超出了您的控制范围,并由TCP/IP堆栈管理.您得到的回报是有序的数据包序列和一定程度的容错(保证正确的数据包排序,并且TCP/IP协议栈可以检测到丢失/重复的数据包,并对应用程序代码透明地处理).

如果你在节点中的套接字级别工作,你几乎肯定会得到多个回调,每个回调都包含一大块数据.你可以把它缝合在一起.这是一件好事 - 这意味着您可以定义自己的机制来识别消息边界,数据压缩等.