背景:
我们有一个使用到服务器的持久连接的客户机/服务器应用程序。
基准测试表明,使用已经打开的连接比花大量时间(2.5秒)建立新连接(加密)快很多倍。
不幸的是,旧连接可能已过时。
是否有方法等待发送消息[确认或错误]的系统级结果?
等待读取,然后获取流的结尾会导致混乱。
我知道这封信可能被分成几包。知道消息的任何部分是否被确认,或者全部被确认,都同样符合我的目的。这里有趣的问题是陈旧的连接。

最佳答案

不幸的是,旧的联系可能
陈腐。
在这种情况下,你最终会得到一个例外。
有没有办法等
系统级发送结果
消息[确认或错误]?
不.
等待阅读,然后获取
流的结束会导致混乱。
困惑于谁?处理混乱是代码的工作。如果您得到了一个意外的EOS,对等端已经关闭了连接,或者中间防火墙已经关闭了,在这种情况下,您必须处理它。
我知道这条信息可能被破坏了
成包。
完全无关。你无法控制它,也无法看到它。您得到的是一个以EOS或异常终止的字节流。
它会适合我的
目的同样清楚地知道
如果消息的任何部分被确认
或者如果一切都是。
不,不会。ACK只意味着它已经到达了对等机的TCP/IP堆栈。您的应用程序感兴趣的是它是否已经进入对等应用程序,并且只有对等应用程序可以通过应用程序协议级ack告诉您这一点。TCP/IP ACK在这里没有帮助。
这里有趣的问题是陈旧的连接。
这是一个相当小的问题。您可以在代码中检测到它,并且可以处理它,同上。几十年来,数据库供应商一直在做这些事情。不是火箭科学,也不需要了解TCP ACK。

关于tcp - 如何等待TCP消息被确认,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3169090/

10-14 12:01
查看更多