C# 需要关于TCP服务器类型的建议,以满足此类应用程序的需要

C# 需要关于TCP服务器类型的建议,以满足此类应用程序的需要,c#,c++,tcp,C#,C++,Tcp,TCP服务器的要求: 从每个客户端接收并发送 结果返回到同一个客户端( 服务器(仅执行此操作) 要求满足100个客户的需求 速度是一个重要因素,即: 即使在100个客户端连接上,也不应该是滞后的 目前我一直在使用C#async方法,但我发现我总是在大约20个连接处遇到laggy。我所说的滞后是指大约需要15-20秒才能得到结果。在大约5-10次连接时,几乎可以立即获得结果。 实际上,当tcp服务器收到消息时,它将与一个dll交互,该dll会进行一些处理以返回结果。不太清楚它背后的工作流程是什么,

TCP服务器的要求:

  • 从每个客户端接收并发送 结果返回到同一个客户端( 服务器(仅执行此操作)
  • 要求满足100个客户的需求
  • 速度是一个重要因素,即: 即使在100个客户端连接上,也不应该是滞后的 目前我一直在使用C#async方法,但我发现我总是在大约20个连接处遇到laggy。我所说的滞后是指大约需要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++的速度。<>我不明白为什么C在这个情况下应该比C++更坏——很有可能你还没有碰到正确的方法来处理传入的连接。为每个客户机生成一个单独的线程肯定是朝着正确方向迈出的一步,假设每个线程的工作负载比CPU密集型的工作负载更受I/O限制。您是为每个连接生成一个线程,还是使用一个线程池来管理多个线程,这是另一回事,需要通过实验来确定,同时还要考虑100个客户端是否是您的最大值 你一定做错了。我个人编写了基于C#的服务器,可以处理1000多个连接,每秒发送超过1条消息,你肯定做错了。我个人编写了基于C#的服务器,可以处理1000多个连接,每秒发送超过1条消息,在获取客户端请求和将响应发送回客户端之间,服务器需要做什么?15-20秒,20个连接,似乎高得离谱,除非你超载了其他资源,例如数据库连接——很难猜测,除非你告诉我们“中间部分”;-)。(请编辑您的Q以完全澄清该部分)。我已经用多种语言,甚至用Python(不以惊人的速度著称;-)完成了许多大规模TCP系统,我不希望在5到20个连接之间的响应时间(由于任何内在因素)出现“膝盖向上”的情况@亚历克斯,是的,在两者之间,它在做其他事情。但我不知道它背后的工作流程是什么。好的,我将通过添加这些附加步骤来听你说。@C\u-Rance:虽然有一些很好的一般性建议给你,但我认为Alex的想法是正确的。只要时间可能花在实际工作上,就不应该关注协议级别。尝试以下方法:虚拟服务器,使其立即返回一些看似合理的缓存数据,并查看其扩展情况。如果它能毫不延迟地处理100个客户机,你就会知道优化工作的重点。@Steven我真的找不出问题出在哪里。我刚刚编辑了这个问题,并提到它附带了一个用于处理的dll。此外,我没有100台电脑来测试实际的设置。你不需要100台电脑,只需要100个同时的TCP/IP连接。除非您能够说明所有时间都花在了哪里,否则您将无法有效地加快速度。在获取客户端请求和将响应发送回客户端之间,服务器需要做什么?15-20秒,20个连接,似乎高得离谱,除非你超载了其他资源,例如数据库连接——很难猜测,除非你告诉我们“中间部分”;-)。(请编辑您的Q以完全澄清该部分)。我已经用多种语言,甚至用Python(不以惊人的速度著称;-)完成了许多大规模TCP系统,我不希望在5到20个连接之间的响应时间(由于任何内在因素)出现“膝盖向上”的情况@亚历克斯,是的,在两者之间,它在做其他事情。但我不知道它背后的工作流程是什么。好的,我将通过添加这些附加步骤来听你说。@C\u-Rance:虽然有一些很好的一般性建议给你,但我认为Alex的想法是正确的。只要时间可能花在实际工作上,就不应该关注协议级别。试试这个:虚拟服务器,让它立即返回一些看似合理的缓存数据和数据