【问题标题】:How to handle multiple connections Abyss Server in XMLRPC - C++如何在 XMLRPC 中处理多个连接深渊服务器 - C++
【发布时间】:2011-10-02 17:59:58
【问题描述】:

场景是下一个: 我有一个 XMLRPC-C++ 应用程序,监听 PORT=8081 上的连接。它实现了一个深渊服务器,使用 xmlrpc-c 库作为下一个:

xmlrpc_c::serverAbyss myAbyssServer(
        myRegistry, //handler of methods
        port,       //8081        
        "xmlrpc_log"   
        );

当我从调用许多 XMLRPC 方法的脚本创建多个连接时,它工作正常。 脚本是这样的: 脚本1: rpc.method1(参数); rpc.method2(参数); rpc.methodN(参数);

如果我在执行此脚本时使用 netstat 和 xmlrpc_log 检查服务器中的连接,则输出类似于 XMLRPC-SERVER:8081 XMLRPC-CLIENT:SOME TIME_WAIT。虽然 XMLRPC_CLIENT IP 是相同的,但在 rpc.method 调用之前它会创建一个新的连接。

当我在同一个客户端中执行两个这样的脚本时,就会出现问题。这意味着,一个脚本中的调用 rpc.methodM(parameters) 与另一个脚本中的 rpc.methodN(parameters) 在同一客户端中同时执行。 这会导致服务器崩溃,并且 XMLRPC-SERVER 保持关闭状态,直到重新启动进程。

我阅读了 Abyss 帮助,但 runOnce() 方法无济于事。默认情况下,调用如上构造函数,MaxConnections默认为30,超时15segs,对于Abyss服务器。

是否有一些配置可以避免这种崩溃?我需要同时支持多个客户端并同时支持多个连接。

感谢您提供与此相关的任何帮助,

真诚地, 卢楚克斯。

【问题讨论】:

    标签: c++ web-services xml-rpc xmlrpclib simplexmlrpcserver


    【解决方案1】:

    嗯。显然,服务器正在处理多个连接并支持使用 pthreads 进行多线程处理。问题应该出在我的 RPC 调用执行的代码中,我猜是因为重入/线程安全问题。

    • 在与其他项目工作一段时间后,我回到了这段代码,问题出在自然语言库中,有一些不可重入的方法。他们解决了,我解决了 :) -

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2015-04-15
      • 2017-12-09
      相关资源
      最近更新 更多