首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要有关TCP服务器类型的建议,以适应这种类型的应用程序。

需要有关TCP服务器类型的建议,以适应这种类型的应用程序。
EN

Stack Overflow用户
提问于 2010-08-15 17:26:53
回答 2查看 203关注 0票数 0

TCP服务器的要求:

  1. 从每个客户端接收结果并将结果发送回同一个客户端(服务器只执行此操作)
  2. 需要为100名客户提供服务
  3. 速度是一个重要的因素,即:即使在100个客户端连接,它不应该是滞后的。

目前,我一直在使用C#异步方法,但我发现在大约20个连接时总是会遇到延迟。我的意思是用15到20秒的时间才能得到结果。在大约5-10个连接时,获得结果的时间几乎是即时的。

实际上,当tcp服务器收到消息时,它将与dll交互,dll会进行一些处理以返回结果。不太清楚它背后的工作流是什么,但是在小范围内您没有看到任何问题,所以我想问题可能是在我的TCP服务器上。

现在,我正在考虑使用同步方法。这样做,我将有一个while循环来阻止accept方法,并在accept之后为每个客户端生成一个新线程。但在100个连接中,这绝对是过头了。

IOCP的机会,不完全确定,但它似乎是一个连接池,因为它处理tcp的方式非常类似于正常的方式。

对于这些TCP方法,我也不确定每次需要传递消息时打开和关闭连接是否是更好的选择。平均而言,每个客户端在5-10分钟的间隔内传递消息.

另一种选择可能是使用web (查看一般处理程序)来形成与服务器的1条连接。任何需要处理的消息都将传递给这个通用处理程序,然后这个处理程序从服务器发送和接收消息。

需要特别是那些大规模使用TCP的人的建议。我没有100台电脑供我测试,所以对我来说很难。语言明智的C#或C++就行了,我更熟悉C#,但会考虑以更快的速度移植到C++。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-15 17:47:27

你一定做错了。我亲自编写了基于C#的服务器,它可以处理1000+连接,每秒发送超过1条消息,响应时间<10 C#,在普通硬件上。

如果您有如此高的响应时间,那么导致阻塞的必须是您的服务器进程。可能是锁上的争用,可能是简单的错误代码,可能是阻塞外部访问导致线程池耗尽。不幸的是,有很多方法可以把这件事搞砸,而且只有很少的方法能把它做好。这里有很好的指导方针,从Rick的高性能Windows编程文章中介绍的基本原理开始,研究SocketAsyncEventArgs示例,该示例涵盖了自版本3.5中的套接字性能增强出现以来.Net中最具表现力的套接字应用程序编写方式等等。

如果您发现自己在前面的任务中迷失了方向(就像看起来恰好是这样),我会敦促您接受一个已经建立的通信框架,也许是带有网络绑定的WCF,并使用WCF的声明式服务模型编程。这样,您就可以在WCF的性能上重新发挥作用了。虽然这对某些人来说可能还不够,但在性能方面,它会让你走得足够远,远比你现在确定的更远。

票数 4
EN

Stack Overflow用户

发布于 2010-08-15 17:32:11

我不明白为什么在这种情况下C#应该比C++更糟糕--很可能您还没有找到处理传入连接的“正确方法”。为每个客户端生成一个单独的线程肯定是朝着正确方向迈出的一步,假设每个线程的工作负载更多地受I/O约束,而不是CPU密集型。无论是每个连接生成一个线程,还是使用线程池来管理多个线程,这是另一回事--而且还需要通过实验来确定,同时还要考虑是否有100个客户端是您最大的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3488438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档