该场景是下一个场景:
我有一个XMLRPC-C ++应用程序,侦听PORT = 8081上的连接。下一步使用xmlrpc-c库实现一个Abyss服务器:

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()方法无济于事。默认情况下,按上述方式调用构造函数,对于Abyss服务器,MaxConnections默认情况下为30,超时为15段。

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

感谢您对此的任何帮助,

真诚的
卢克斯

最佳答案

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


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

关于c++ - 如何在XMLRPC中处理多个连接Abyss Server-C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6649802/

10-12 02:46