【问题标题】:How to get a more stable socket connection in Linux/C如何在 Linux/C 中获得更稳定的套接字连接
【发布时间】:2009-12-09 09:15:15
【问题描述】:

我正在运行一个游戏网站,用户使用 Adob​​e Flash 客户端连接到在 Fedora Linux 机器上运行的 C 服务器。

用户经常抱怨断开连接。通常它们是“对等方重置连接”-断开连接。

有什么方法可以使连接更稳定,还是完全取决于从用户主机到我的服务器的路由?

我尝试过的一件事是通过每隔一分钟以明文形式发送 PING 来使其更稳定,以避免超时问题。

有人有更多想法吗?

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    您没有用尽服务器进程在服务器上提供的套接字/内存使用/cpu 的数量,是吗?

    请与ulimit 联系。

    此外,如果可能,请尝试跟踪源代码中的错误消息(发送 RST 数据包时--),即当 send() 或 accept() 返回错误值时。在这种情况下,将调试消息打印到日志中;如果您真的想调试它,请模拟服务器:

    • 在单独的机器上运行它进入调试模式(可能是服务器的克隆)
    • 模拟数千个连接(或查找网络利用程序)
    • 回溯调用和/或嗅探连接

    【讨论】:

    • 另外,您是否检查过 (netstat) 当客户端退出时您正确释放了连接?
    【解决方案2】:

    你在哪里运行服务器?
    在家里?在上班?在托管设施?
    这将产生很大的不同。

    您能否将您的应用设计为连接到服务器上的两个套接字,然后进行负载平衡或使其成为主动/被动(或主动/主动)?

    【讨论】:

    • 我们在托管设施中使用托管。我们有四台服务器,一台用于“游戏室”。每个用户都有自己的套接字。一个晚上可以有大约 2000 人在线(每台服务器最多 200 人)。
    • 我在想,Linux/setsockopt 等中是否有任何我可以尝试更改的配置设置。
    • 没有我使用过的设置,套接字通常非常健壮。断开连接在封闭环境中是不常见的,但在“现实世界”中可能会发生。您可能需要重新设计以使用 UDP(无连接),然后在上面创建自己的协议(上面提到的两个套接字/负载平衡/主动-主动/等)
    【解决方案3】:

    您可以使用 SO_KEEPALIVE TCP 套接字选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-03
      • 2010-11-15
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多