提高C#套接字性能

本文关键字:性能 套接字 提高 | 更新日期: 2025-03-16 11:22:38

我们有一个用C#编写的TCP异步套接字游戏服务器,为许多并发连接提供服务。除了以下问题外,其他一切都很好:

  1. 某些用户频繁断开连接(并非所有用户都介意)
  2. 连接速度较慢的用户性能下降

大多数面临这个问题的用户都在使用GSM连接(基于CDMA的便携式USB加密狗),并且信号强度通常很差。所以基本上它们的带宽相当差。可能低于每秒1KB。

我的问题:我们可以做些什么来使连接更加稳定,并提高性能,即使是速度较慢的连接?

我认为客户端和服务器端的动态TCP缓冲区是正确的,但不确定是否会因为为我所在方向的每个连接动态执行此操作的开销而导致性能下降。

最大数据包大小小于1 KB。

服务器和客户端上的当前TCP缓冲区大小为16KB

任何关于如何在C#中为较差或较慢的连接编写稳定的anync套接字代码的指针或引用都将是一个很大的帮助。提前谢谢。

提高C#套接字性能

"性能"是一个非常相对的术语。看起来您主要关心的是数据传输速率。不幸的是,在低带宽连接的情况下,你无法对此做太多的事情——也许数据压缩会有所帮助,但实际效果取决于你的数据,传输速率的提高与压缩/去压缩延迟之间总是存在权衡的。任何类型的互动游戏都需要考虑延迟。

正如@Pierre在评论中建议的那样,你可能会考虑UDP进行传输,但只有在你能容忍数据包丢失和重新排序的情况下,这才有效,这同样取决于数据和你对它的处理。

我建议调查的另一种方法是提供两种不同的服务质量模式。处于良好链接上的客户端可以使用完整的功能(例如,全分辨率游戏图像),而低带宽客户端则可以减少选项(例如,尺寸小得多的低质量图像)。您可以测量客户端连接/握手的初始往返时间以选择模式。

希望这能有所帮助。