【发布时间】:2012-02-01 10:59:36
【问题描述】:
通过 TCP 连接在 Node.js 中接收大数据包时遇到问题。 似乎缓冲区中有一个上限设置为大约 55kB。当我收到大量数据(大约 70-80k)时,它会拆分这些数据。
现在,我使用过 UDP 套接字,我知道如何期待 on('data', function(){}) 事件以及在最终收到消息时如何期待 on('end', function(){}),TCP 的问题是我从未收到 @987654323 @event,服务器(在 C# 中)从不发送 FIN 数据包。这是因为我需要让套接字保持活动和持续(我们不想关闭它)。
是否有某种方法可以发送 FIN 数据包,从 C# 到 Node.js 的,而无需关闭/关闭套接字?
或者,是否有某种方式可以触发节点本身内部的on('end', function(){}) 事件?
问候。
编辑: 为了解决这个问题,比如说我有 2 个客户端试图通过 TCP 套接字获取信息。一个先连接,然后收到一个巨大的请求(这里的大小没有问题)。
但是在处理这个请求时,另一个请求执行相同的请求,因为 TCP 连接是通过节点的,所以它们使用相同的套接字。 有什么方法可以区分请求吗?还是我必须为向 TCP 服务器发出的每个请求设置一个套接字?
【问题讨论】:
-
您知道消息有多大,即消息是否包含自身的大小或有效负载?是否有任何类型的消息结束标记?
-
为了解决这个问题,现在我们设置了一个消息结束标记,但我们希望有比这更好的解决方案。
-
问题是TCP是一个streaming协议,数据像流一样流动,消息之间没有内置边界。它可靠且易于使用,但如果不用作纯数据流,通常需要在其上分层的另一个协议。
-
我明白了,补充一下这个问题,比如说我有 2 个客户端试图通过 TCP 套接字获取信息。一个先连接,然后收到一个巨大的请求(这里的大小没有问题)。但是,在处理这个请求时,另一个请求执行相同的请求,因为 TCP 连接是通过节点,所以它们使用相同的套接字。有什么方法可以区分请求吗?还是我必须为每个完成的请求设置一个套接字?我会将其添加为问题的编辑。
-
两个客户端的服务器套接字将相同,但定义每个客户端连接的套接字对将不同。服务器上 accept() 返回的套接字对象对于每个连接的客户端都是唯一的,因此很容易区分请求。