XMLRPCPP异步处理多个调用?

时间:2010-07-19 20:58:24

标签: c++ sockets tcp xml-rpc

我有一个处理各种不同命令的远程服务器,其中一个是事件提取方法。

如果队列中列出的一个或多个事件已准备好进行处理,则事件提取会立即返回。如果事件队列为空,则此方法在超时几秒后才会返回。这样我就不会遇到任何HTTP /套接字超时。当事件变为可用时,该方法立即返回。这样客户端只与服务器建立连接,服务器不必与客户端建立任何连接。 此事件机制很好地工作。我正在使用boost库来处理队列,事件通知等。

这是问题所在。当服务器阻止从事件获取方法返回时,在此期间,我不能发出任何其他命令。 在源代码XmlRpcDispatch.cpp中,我在“work”方法中看到了一个使用阻塞调用“select”的简单循环。 似乎在方法处理繁忙时,没有处理其他请求。

问题:我没有看到什么,XmlRpcpp(xmlrpc ++)可以异步处理多个请求吗?有谁知道更好的C ++ xmlrpc库?我不认为Boost库有一个允许我发出远程命令的组件吗? 我实际上并不关心XML或over-HTTP功能。我只需要以任何形式或形式通过TCP发出(异步)命令? 我期待着任何人都可以提供任何意见。

1 个答案:

答案 0 :(得分:1)

我也遇到了XMLRPC的一些问题,并调查了许多解决方案,如GSoap和XMLRPC ++,但最后我放弃并使用Boost.ASIOTinyXML++从头开始编写整个HTTP + XMLRPC(后来我将TinyXML交给expat)。这不是那么多工作;我在大约一周内完成了这项工作,从头开始,最后完成了许多RPC调用。

Boost.ASIO给出了很好的结果。正如它的名字所说,它完全是异步的,并且具有出色的性能和很小的开销,对我来说,非常非常重要,因为它在嵌入式环境(MIPS)中运行。

稍后,这可能是您的情况,我将XML更改为Google's Protocol-buffers,甚至更高兴。它的API及其消息容器都是类型安全的(即你发送一个int和一个浮点数,它永远不会转换为字符串和返回,就像XML的情况一样),一旦你得到它的挂起,这不需要很长时间,它是非常有效的解决方案。

我的推荐:如果您可以放弃XML,请使用Boost.ASIO + Protobuf。如果您需要XML:Boost.ASIO + Expat

从头开始做这些事情真的值得。