发送FIN数据包以通知数据已发送

时间:2016-01-14 05:55:26

标签: c# node.js sockets tcp

我有一个Windows服务,不断向NodeJS流媒体发送数据,然后将数据传输给客户端。

在NodeJS流媒体上,我正在收听套接字事件“data”:

socket.on('data', function ...

在该函数中,我将所有收到的数据包捆绑到一个字符串中。 在收到所有相关数据包之后,我想对该字符串进行操作,然后将其传输到客户端。

为此,我尝试听“结束”事件:

socket.on('end', function ...

但是“结束”事件从未被调用过。 我读到我必须向NodeJS流媒体发起一个FIN数据包才能调用“结束”事件,为此我必须关闭C#服务上的流编写器。 但是,我正在处理许多不同客户端的大量数据,而且我担心每次使用单个字符串时关闭编写器会产生很大的开销。这是一个合理的担忧吗?如果是这样,是否有其他方式发送FIN数据包?

谢谢, 阿里克

1 个答案:

答案 0 :(得分:0)

FIN表示TCP连接的(正常)结束。如果您想要为每个连接发送多个“消息”,听起来您只需要以某种方式构建数据包。有很多方法可以做到这一点,但这一切都取决于你的需求。几个例子:

  • 使用固定数量的长度字节为每个“消息”添加前缀,以指示整个“消息”的后续字节数。固定长度字节数取决于您为给定“消息”传输的最大数据量。

  • 使用某种分隔符。这取决于您传输的数据类型。如果是二进制数据,这将不是一个好的选择。如果它是二进制数据,您可以使用空字节或换行符(取决于您的文本内容)。