gpt4 book ai didi

c++ - XMLRPCPP 异步处理多个调用?

转载 作者:可可西里 更新时间:2023-11-01 02:53:03 24 4
gpt4 key购买 nike

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

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

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

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

最佳答案

我在使用 XMLRPC 时也遇到了一些问题,并研究了很多解决方案,如 GSoap 和 XMLRPC++,但最后我放弃了,使用 Boost.ASIO 从头开始​​编写了整个 HTTP+XMLRPC。和 TinyXML++ (后来我将 TinyXML 换成 expat )。这真的不是那么多工作;我自己用了大约一周的时间完成了这项工作,从头开始,最终完成了许多 RPC 调用的完全实现。

Boost.ASIO取得了很好的成绩。顾名思义,它是完全异步的,并且具有出色的性能和很少的开销,这对我来说非常重要,因为它在嵌入式环境 (MIPS) 中运行。

稍后,这可能是您的情况,我将 XML 更改为 Google's Protocol-buffers ,甚至更快乐。它的 API 以及它的消息容器都是类型安全的(即你发送一个 int 和一个 float,它永远不会像 XML 那样转换为字符串并返回),一旦你掌握了它,这不会花很长时间,这是非常有成效的解决方案。

我的建议:如果您可以放弃 XML,请选择 Boost.ASIO + Protobuf
如果需要XML:Boost.ASIO + Expat

从头开始做这些东西真的是值得的。

关于c++ - XMLRPCPP 异步处理多个调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3285038/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com