我有一个服务器应用程序,它从客户端接收一些特殊的 TCP 数据包,需要通过向客户端发送高级 ACK 来尽快对其使用react(TCP ACK 不符合我的需求)。
然而,这个服务器确实是网络密集型的,有时数据包发送的时间太长(比如在本地网络中需要 200 毫秒,而一个简单的服务器应用程序可以在不到 1 毫秒的时间内发送它)。
有没有办法在 Delphi 中用高优先级标签或类似的东西来标记这个数据包?或者可能使用 Win32 API?
提前致谢。
编辑
感谢您到目前为止的所有回答。我会添加一些细节。我的产品具有以下设置:有几种设备基于具有 WIFI 连接的车辆。当他们到达车库时,这些设备连接到我的服务器并开始传输数据。
由于硬件限制,我实现了一个高级 ACK 来让设备知道最后一个数据包成功到达(请不要争论这个 - 即使我得到一个正确的 TCP ACK 数据也可能被破坏) .但是,如果我使用与远程数据库通信的服务器软件来发出此 ACK,则会出现很长的延迟(>200 毫秒)。如果我使用专用软件来完成这项任务,我会得到很小的延迟 (<1ms)。所以,我在想,如果我可以告诉 Windows 先发送那些特殊的数据包,因为在我看来,这个数据包正在延迟,所以数据库的数据包可以被传送。
这就是我提出问题的动机。
编辑 2
根据要求:这是旧版软件,我使用的是旧版 dclsockets140.bpl 包和 Delphi 2010 (14.0.3593.25826)。
最佳答案
IMO 很难实现这一点。涉及到很多设备和软件。首先,如果您在 2 个不同的操作系统之间进行通信,您会遇到延迟。第二,软硬防火墙、杀毒软件,一切都在过滤/延迟你的包裹。
你也可以尝试“破解”系统(这涉及到一些关于帧/段如何打包/发送、流量控制、拥塞等的非常好的知识),或者通过从代码中改变它,或者通过使用一些http://half-open.com/ 等工具或其他人。
关于delphi - 如何在 Delphi 中提高 TCP 数据包的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9829431/