TCP客户端服务器:阻止连接呼叫

时间:2011-03-25 03:54:37

标签: tcp blocking connect

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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