TCP客户端服务器:阻止连接调用

TCP客户端服务器:阻止连接调用,tcp,blocking,connect,Tcp,Blocking,Connect,我正在构建一个需要TCP进行通信的分布式应用程序。最终的实验将涉及数千台服务器,与它们通信的客户端数量大约是它们的10-100倍。当前的设计是为每个事务建立连接、通信,然后关闭连接 因为我只使用了一些简单的多线程服务器和一些客户端,所以我选择了阻塞套接字进行通信,这听起来很简单。我不确定这种方法是否能达到足够高的规模。有人能分享他们的经验吗 目前,该代码运行在一台机器48核/本地环回上,有三个服务器进程和几个客户端。客户机有一个紧密的for循环,他们在其中建立连接,与任何一台服务器通信,然后断开

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

因为我只使用了一些简单的多线程服务器和一些客户端,所以我选择了阻塞套接字进行通信,这听起来很简单。我不确定这种方法是否能达到足够高的规模。有人能分享他们的经验吗

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


任何经验分享都会有帮助…

对于您提到的场景,使用阻塞套接字可能不是一个好主意。首先,您应该使用非阻塞套接字。第二;如果您正在微软Windows上编写服务器,那么您可以考虑使用I/O完成端口,如果您的服务器在Linux上实现,那么EpRoad的规模将很好。


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

谢谢Tayyab…我们决定使用某种哈希表/映射来缓存连接。因此,现在客户端将在这个哈希表中存储套接字,这增加了一些灵活性,我们不需要每次都建立和断开连接。但它可能会限制我的服务器进程,因为我知道一个进程在TCPLinux中最多可以建立1024个实时连接。而且我们没有根权限更改每个m/c的此限制。