gpt4 book ai didi

TCP 客户端服务器 : blocking connect call

转载 作者:可可西里 更新时间:2023-11-01 02:55:03 25 4
gpt4 key购买 nike

我正在构建一个需要 TCP 进行通信的分布式应用程序。最终实验将涉及数千台服务器,与它们通信的客户端数量大约是其 10-100 倍。当前的设计是为每个事务建立连接、通信然后关闭连接。

  1. 由于我只做过一些带有几个客户端的简单多线程服务器,所以我选择了阻塞套接字进行通信(听起来很简单)。我不确定这种方法是否会扩展得足够高。有人可以分享他们的经验吗?

  2. 目前,代码在具有三个服务器进程和几个客户端的单台机器(48 核/本地环回)上运行。客户端有一个紧密的 for 循环,他们建立连接,与任何一台服务器通信,然后断开连接。这些初始测试要求客户进行大约一百万次 for 循环迭代。基本上,随着我们扩大实验规模,这是严格的测试。随机地,一些客户端在尝试连接到服务器时卡住。与此同时,该服务器可能与其他客户端通信正常。所有调用都被阻止。有人可以建议发生了什么吗?服务器(多线程)的监听队列为 50,一个客户端每秒进行大约 1500 个连接。 (它是一个用于高端工作负载的分布式系统 :))此客户端-服务器之间先前未中断的连接是否可以成为原因?

任何经验分享都会有所帮助...

最佳答案

对于您提到的场景,使用阻塞套接字可能不是一个好主意。首先,您应该使用非阻塞套接字。其次;如果您在 Microsoft Windows 上编写服务器,那么您可以考虑为此目的使用 I/O 完成端口,如果您的服务器是在 Linux 上实现的,那么选择“epoll”将具有很好的扩展性。

这里最大的问题是,从设计上看,您似乎是在为服务器上的每个线程管理一个套接字/连接。创建如此多的线程会耗尽系统资源,而且为每个连接创建线程的速度较慢。

关于TCP 客户端服务器 : blocking connect call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5428363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com