提高C#套接字性能

提高C#套接字性能,c#,performance,sockets,asyncsocket,C#,Performance,Sockets,Asyncsocket,我们有一个用C#编写的TCP异步套接字游戏服务器,为许多并发连接提供服务。除以下问题外,其他一切正常: 某些用户频繁断开连接(并非所有用户都介意) 连接速度慢的用户性能下降 大多数面临此问题的用户都使用GSM连接(基于CDMA的便携式USB加密狗),并且信号强度通常很差。所以基本上他们的带宽很差。可能低于每秒1KB 我的问题:我们可以做些什么来让连接更稳定,甚至对于较慢的连接也能提高性能 我认为客户端和服务器端的动态TCP缓冲区是正确的,但我并不确定由于为我的方向的每个连接动态执行此操作的开销而

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

  • 某些用户频繁断开连接(并非所有用户都介意)
  • 连接速度慢的用户性能下降
  • 大多数面临此问题的用户都使用GSM连接(基于CDMA的便携式USB加密狗),并且信号强度通常很差。所以基本上他们的带宽很差。可能低于每秒1KB

    我的问题:我们可以做些什么来让连接更稳定,甚至对于较慢的连接也能提高性能

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

    最大数据包大小小于1 KB

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

    任何关于如何用C#编写稳定的anync套接字代码的指针或参考,对于连接不良或速度较慢的用户都会有很大帮助。提前感谢。

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

    彼埃尔在评论中建议您可以考虑UDP用于传输,但是只有容忍数据包丢失和重新排序,这才是有效的,这又取决于数据和您使用它的方式。 我建议调查的另一种方法是提供两种不同的服务质量模式。链接良好的客户端可以使用完整的功能(例如,全分辨率的游戏图像),而带宽较低的客户端可以使用较少的选项(例如,尺寸小得多的低质量图像)。您可以在客户端连接/握手时测量初始往返时间以选择模式


    希望这能有所帮助。

    您是否考虑过使用UDP而不是TCP?您目前是如何做到的?它是完全异步的吗?你在集中资源,比如缓冲区吗?