1

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

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

当我从调用许多 XMLRPC 方法的脚本创建多个连接时,它工作正常。脚本是这样的: Script1: rpc.method1(parameters); 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 保持关闭状态,直到重新启动该过程。

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

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

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

真诚的,卢丘斯。

4

1 回答 1

0

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

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