代码之家  ›  专栏  ›  技术社区  ›  wiwulo

Web服务速度减慢

  •  2
  • wiwulo  · 技术社区  · 16 年前

    我的网络服务速度慢了。 我的(Web)服务在GSOAP管理的C++中。它不是由IIS/Apache托管的,而是使用XML。 我的客户在.NET中 服务计算时间很短(<0.1s用于准备回复)。我希望服务顺利、快速、有效。 我有大约100个客户,响应时间是1s。 客户端每分钟大约有一个请求。 客户端正在通过TCP开放端口测试检查Web服务是否存在。 因此,为了避免可能的拥塞,我将gsoap keepalive改为false。 在那之前,一切都很好:我在tcpview(SysInternals)中看到了连接。

    新的特殊同步程序现在调用一个循环服务。 这是更高的负载,但所有的处理都在30秒内完成。 有了SysInternalsTcpView,我看到大约有1000个连接在等待中。 他们减慢了服务速度,现在服务需要几秒钟的时间来回复。

    是否需要重置soaphttpclientProtocol连接? 有人有时间在循环中等待网络服务呼叫的幽灵?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Robert MacLean    16 年前

    听起来您没有在呼叫后关闭连接,也没有在每个请求上打开新的连接。关闭连接或重新使用打开的连接。

        2
  •  0
  •   Denis    14 年前

    要非常小心上面提到的实现。他们有严重的问题。

    1. yakkowarner.blogspot.com/2008/11/calling-web-service-in-loop.html(上面的注释)中描述的实现:

      问题: 下一次使用wsdl.exe重新生成Web服务时,您的所有工作都将被清除,您将忘记您没有提到的是,该修复程序依赖消息字符串来执行操作,这是相当糟糕的。

    2. forums.asp.net/t/1003135.aspx中描述的实现(上面的注释):

      问题: 您要选择一个介于5000和65535之间的端点,所以在表面上这看起来是个好主意。如果您考虑一下,就没有办法(至少我想不出)可以保留端口供以后使用。您如何保证列表中的下一个端口当前未被使用?您按顺序选择要使用的端口,如果其他应用程序选择了列表中的下一个端口,那么您将被托管。或者,如果在您的客户机上运行的其他应用程序开始使用随机端口进行连接,您将在不可预知的时间点被主机托管。您会随机收到一条错误消息,比如“远程主机无法访问或不可用”——更难进行故障排除。

    虽然我不能为这个问题提供正确的解决方案,但您可以做的一些事情是:

    1. 尽量减少Web服务请求的数量,或在较长的时间内将它们分散开。
    2. 对于您的应用程序类型,Web服务可能不是正确的体系结构-对于响应时间为1毫秒的应用程序,您应该使用消息传递系统-而不是Web服务
    3. 使用Windows中的注册表将操作系统的允许连接数设置为65K
    4. 设置您的操作系统的时间,使套接字保持在时间内\等待某个较低的数字(这显示了它自己的问题列表)