如何在XMLRPC中处理多个连接Abyss Server - C ++

时间:2011-07-11 12:03:20

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

情景是下一个: 我有一个XMLRPC-C ++ applcation,在PORT = 8081上监听连接。它实现了Abyss Server,使用xmlrpc-c库作为下一个:

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

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

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

当我在同一客户端中执行其中两个脚本时,会出现问题。这意味着,一个脚本中的调用rpc.methodM(参数)与另一个脚本中的rpc.methodN(参数)同时在同一客户端中执行。 这会在服务器中产生崩溃,并且XMLRPC-SERVER保持不变直到重新启动该进程。

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

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

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

此致 Luchux。

1 个答案:

答案 0 :(得分:0)

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

  • 在与其他项目合作完成后,我回到了这个代码,问题出在自然语言库中,有些不是可重入的方法。他们解决了它,我解决了它:) -