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

通过TCP连接在Node.js中接收大型数据包时遇到问题。 似乎缓冲区中有一个大约55kB的上限。 当我收到大量的数据(大约70-80k),它分裂了这个数据。

现在,我已经使用UDP套接字,我知道如何期待on('data', function(){})事件和如何期待一个on('end', function(){})接收到,与TCP的问题是,我从来没有收到一个on('end', function(){})事件,服务器(在C#中)永远不会发送FIN数据包。 这是由于我要求保持sockets活着和正在进行(我们不想closures它)。

是否有某种方式发送FIN包,从C#到Node.js之一,而不必closures/closures套接字?

或者,可选地,是在节点本身内部触发on('end', function(){})事件的方式吗?

问候。

编辑:加起来的问题,比如说我有2个客户端试图通过TCP套接字获取信息。 首先连接,并得到一个巨大的请求(在这里的大小没有问题)。

但是,当这个请求被处理的时候,另外一个请求是一样的,因为TCP连接是通过节点的,它们使用相同的套接字。 有什么办法来区分请求吗? 或者我将不得不为TCP服务器的每个请求build立一个套接字?

UDP是面向数据包的。 您可以发送尽可能多的数据,最多可容纳65,507字节。 这是火灾和遗忘,没有处理丢包或重新sorting的内在机制。

TCP是以stream为导向的。 您的数据将根据包括数据量和传输速率在内的一些因素分解为数据包。 这大多超出了您的控制范围,并由TCP / IP堆栈进行pipe理。 你得到的是一个有序的数据包序列和一定程度的容错性(保证正确的数据包sorting,丢失/重复的数据包被TCP / IP协议栈检测和处理,透明地处理应用程序代码)。

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

我有类似的问题,看起来你需要使用两种技术:

  1. 一种parsing消息的方法,并将它一起查找 —我使用了下面的答案[question]: nodejs – parsingchunked twitter json
  2. 您可以为第二个客户端启动一个新的tcp连接,或为每个请求创build一个持有clientID的数组。 当一个消息从服务器返回时,您将获取数组中的第一个clientID并将消息传递给它们。

我会说,尝试缓冲和追加