gpt4 book ai didi

Node.js 写入后刷新套接字

转载 作者:可可西里 更新时间:2023-11-01 02:47:03 25 4
gpt4 key购买 nike

我正在 Node 中实现一个 tcp 协议(protocol)。

完整来源:
https://github.com/roelandmoors/ads.js/blob/master/ads.js

规范:
http://infosys.beckhoff.com/content/1033/tcadsamsspec/html/tcadsamsspec_amstcppackage.htm?id=17754

问题是我用它来发送包裹:

this.tcpClient.write(buf);

如果我发送多个命令,那么多个命令将组合成一个 tcp 数据包。
这行不通。

SO上有更多关于这个的问题,但是他们建议使用分隔符。
但由于我无法更改协议(protocol),所以这不是一个选项。

没有简单的方法来冲洗 socket 吗?

socket.setNoDelay() 没有帮助。

编辑:我也尝试过使用 drain 事件发送下一次写入,但从未调用过该事件?

更新:

这似乎解决了问题,但非常丑陋,如果它总是有效,我现在不这样做。
我没有直接写入它,而是写入缓冲区:

this.writeFILO.push(buf);

每个周期(?)我都在向套接字流写入一个包:

var sendCycle = function(ads) {
if (ads.writeFILO.length > 0) {
ads.tcpClient.write(ads.writeFILO.shift());
}
setTimeout(function() {
sendCycle(ads);
}, 0);
}

最佳答案

我指的是 the socket.write(data, [encoding], [callback]) API :

The optional callback parameter will be executed when the data is finally written out - this may not be immediately.

因此,设置一个队列(数组很好)来保存要发送的消息。
当调用上述回调时,检查队列并在需要时发送..

然而,这不能保证您正在寻找什么,您必须进行测试。不幸的是,当远程端点确认它实际收到该消息时,文档没有明确说明......

最后,正如您得出的结论,TCP 是一个

我现在想到一个有趣的想法,但是,如果您被迫使用现有协议(protocol),那么打开两个 TCP 连接。
当一个连接确认(无论更高级别的协议(protocol)是什么)收到该消息时,通过另一个连接发送下一个......等等......

无论如何,不​​错的挑战:)

关于Node.js 写入后刷新套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22414353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com