【发布时间】:2012-10-28 02:25:53
【问题描述】:
我做了一个简单的 NodeJS TCP 服务器,一个 Java 客户端发送一个图像:
encodedImage = <a base64 encoded image>
out.write("IMG;" + encodedImage);
out.flush();
我的NodeJS服务器如下:
net.createServer(function(TCPSocket){
TCPSocket.on("data", function(data){
console.log("TCP Recieved: " + data.length);
});
}).listen(5000);
但是,即使我发送所有数据并立即刷新,输出如下:
TCP Recieved: 13
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1472
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
我希望它以一个简单的块接收它,但我认为它是由于 NodeJS 的事件处理机制而发生的,对于作为单个块发送的数据实现单个块数据的最佳方法是什么?据我所知,一个 TCP 窗口可以比 1344 字节的数据大得多。我想过将标头值用作 HTTP,所以我知道长度广告构造了我想要的对象。
【问题讨论】:
-
这就是 tcp 的工作方式。不仅在节点中,而且在任何地方。你无法控制这一点。你不应该尝试。在编写 tcp 服务器时,始终假设数据以随机大小的块进入。
-
是的,我知道 TCP 是一个流协议,但我想知道是否有办法在收到特定数量的数据时触发事件,比如 java 的套接字读取,但我需要做一个缓冲机制
标签: java node.js networking tcp