有一个通过终端服务/远程桌面服务虚拟通道 API 进行通信的应用程序。随机且周期性地(大约每 20,000 条消息),客户端将发送一条消息(VirtualChannelWrite 返回 0,并使用 CHANNEL_EVENT_WRITE_COMPLETE 调用 VirtualChannelOpenEvent),但服务器调用 WTSVirtualChannelRead 永远不会读取该消息。服务器上没有错误消息。客户端写入没有时间差异的迹象。
在服务器端,虚拟通道只能从一个线程访问进行读写,因此不是线程问题(WTSVirtualChannelRead 和 WTSVirtualChannelWrite 不是线程安全的)。
任何人都了解导致丢失消息的原因?
我想知道这个 API 是否根本无法针对高密度的客户端到服务器流量进行扩展(从未见过从服务器到客户端的丢弃消息)。根据MSDN,我想知道服务器上的重叠 I/O 解决方案是否会表现得更好:“WTSVirtualChannelQuery 返回一个文件句柄,您可以使用它来执行异步(重叠)读写操作”。