2

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

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

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

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

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

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

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

任何关于如何在 C# 中为连接不良或慢速编写稳定的 anync 套接字代码的指针或参考资料都会有很大帮助。提前致谢。

4

1 回答 1

2

“性能”是一个非常相对的术语。看起来您主要关心的是数据传输速率。不幸的是,考虑到低带宽连接,您对此无能为力——也许数据压缩会有所帮助,但实际效果取决于您的数据,并且在传输速率提高与压缩/解压缩延迟之间总是存在权衡。对于任何类型的互动游戏,还需要考虑延迟。

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

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

希望这个对你有帮助。

于 2012-09-05T20:12:01.890 回答