我遇到了一个问题,我的应用程序被提供给运行 Citrix IA 客户端的 Windows XP PC 客户端。我们使用 citrix com 端口重定向将客户端 PC 上的数据捕获设备中的串行数据隧道传输到服务器上运行的应用程序。
根据 Wireshark 捕获的数据,我们看到每台客户端 PC 以大约每秒 400 个数据包的速率发送(带宽使用量大约为 28 千字节/秒),每个数据包包含大约 10-15 字节的数据和 50 多个字节的 TCP/IP 开销,这使我们的 WAN 饱和并导致拥塞问题。
我认为问题在于,Citrix 将此 COM 端口流量视为交互流量,并尝试尽快发送。就服务器上的应用程序而言,此 COM 端口数据实际上不是交互流量,如果对 COM 端口数据进行缓冲,然后每 100 毫秒发送一次或类似情况(这将减少数据包开销),则不会对应用程序产生负面影响。
在这个问题上,我没能从 Citrix 那里得到太多帮助。Citrix 的大部分文档都侧重于优化从服务器到客户端的下行流量,或者通过优化来自客户端的上行“交互式”流量来优化客户端的响应能力。不幸的是,就我而言,这导致我的 WAN 充斥着大量微小的数据。
我该怎么做才能防止这种拥塞发生?我看过一些关于对 COM 端口数据进行虚拟通道带宽限制的参考资料,但我想知道它是如何工作的,而且我找不到有关它的任何详细信息,甚至在 Citrix 中也是如此。它是否只是缓冲在客户端接收到的 COM 端口数据,然后仅以虚拟通道带宽上限允许的较慢速率将其发送到服务器?
关于如何解决此问题的任何其他想法或建议也将受到赞赏。
答案1
不幸的是,Citrix/RDP/etc 上的 com-port 都存在同样的问题。应用程序能否与 com-port 良好配合取决于应用程序。如果应用程序每秒尝试从 comport 读取 1 个字节 10000 次……您最终会收到 10000 个 1 字节的请求……这会导致您看到的结果。除非重写应用程序以使其更适合 citrix/RDP……否则您只能对带宽消耗设置硬性限制……但这可能不会像您希望的那样有效。