我们有一个用 C# 编写的 TCP 异步套接字游戏服务器,为许多并发连接提供服务。除了以下问题之外,其他一切正常:
- 某些用户经常断开连接(并非所有人都介意)
- 连接速度慢时用户的性能下降
大多数面临此问题的用户都使用 GSM 连接(基于 CDMA 的可移植 USB 适配器),并且信号强度通常很差。所以基本上他们的带宽相当差。也许每秒低于 1KB。
我的问题:我们可以做些什么来使连接更加稳定并提高性能,即使对于较慢的连接也是如此?
我正在考虑客户端和服务器端的动态 TCP 缓冲区,但不太确定由于为我的方向的每个连接动态执行此操作的开销而导致的性能下降是否正确。
最大数据包大小低于 1 KB。
当前服务器和客户端上的 TCP 缓冲区大小为 16KB
任何关于如何在 C# 中为较差或缓慢的连接编写稳定的 anync 套接字代码的指针或引用都会有很大的帮助。提前致谢。
最佳答案
“性能”是一个非常相对的术语。看起来您主要关心的是数据传输速率。不幸的是,考虑到低带宽连接,您对此无能为力 - 也许数据压缩可以有所帮助,但实际效果取决于您的数据,并且传输速率改进与压缩/解压缩延迟之间始终需要权衡。任何类型的互动游戏都需要考虑延迟。
正如 @Pierre 在评论中建议的那样,您可以考虑使用 UDP 进行传输,但这只有在您可以容忍数据包丢失和重新排序的情况下才有效,而这又取决于数据以及您对数据的处理方式。
我建议研究的另一种方法是提供两种不同的服务质量模式。良好链接的客户端可以使用全部功能(例如,全分辨率游戏图像),而低带宽客户端将获得较少的选项(例如,尺寸小得多的低质量图像)。您可以测量客户端连接/握手的初始往返时间来选择模式。
希望这能有所帮助。
关于c# - 提高 C# 套接字性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12288309/