【问题标题】:Non - blocking RPC invocation, using gSoap非阻塞 RPC 调用,使用 gSoap
【发布时间】:2013-05-10 12:27:32
【问题描述】:

这可能吗?

我知道,我可以创建 one-way asynchronous communication,但我希望它是双向的。

换句话说,我问的是request/response pattern,但-阻塞,如here 所述(3rd 选项)

Asynchronous, acknowledged, point-to-point connection using gSoap 相关 - 我也想让(n)acks 异步

【问题讨论】:

  • WSClient 总是主动与WSServer 对话,当你的WCLient 做一个SOAPRequest 时可以接收到一个SOAPResponce(双向)或不接收(单向)。但是这种行为是在服务描述(WSDL)上定义的。
  • @nms - 是的,但这不是我要问的。请检查我的编辑。
  • @Stolas - 第一个是python,而我需要C++,第二个似乎与我无关。你能澄清一下吗?
  • 嗯,我只是指出了使用基于事件的编程来解决您的问题的基本思想。我可能误解了你的问题。

标签: c++ c soap asynchronous gsoap


【解决方案1】:

您需要一种将请求与回复相关联的方法。在正常的 RPC 中,它们通过时间线关联:在另一个响应发生之前,响应跟随响应。

一种常见的解决方案是随请求一起发送密钥。回复引用相同的密钥。如果这样做,双向非阻塞 RPC 将成为两个单向非阻塞 RPC 连接的特例。密钥通常被称为 request-id 或 noince。

【讨论】:

    【解决方案2】:

    我认为通过基本用法这是不可能的, 实现两种方式的唯一方法是通过响应“调用结果”

    但你可能想使用一些小技巧 1]在客户端创建另一个server2并从服务器调用该server2 或者,如果不是这样,由于 NAT / 防火墙等,您可以通过 Internet 进行操作
    2]重新构建您的api,以便客户端根据服务器第一次响应再次调用服务器。

    【讨论】:

    • 是的,这是我能想到的唯一解决方案。这会起作用,但它仍然会阻塞。因此,为避免这种情况,必须启动一个新线程。这就是我要避免的......
    【解决方案3】:

    您可以在两端都有客户端 - 服务器。例如,您可以在系统 1 和系统 2 上拥有客户端服务器。(我将发送者指定为 cient,将接收者指定为服务器)。您将异步消息从 sys1 客户端发送到 sys 2 服务器。从 sys1 接收消息后,您可以将 sys 2 客户端的异步响应发送回 sys1 服务器。这就是您可以进行异步双向通信的方法。

    【讨论】:

    • 是和不是。是的 - 似乎我可以做到这一点,我想过这个。而“否”-我希望响应通过同一个 TCP(或任何传输方式)连接(您的建议将为两个方向创建 2 个连接)
    【解决方案4】:

    我猜您需要在单独的线程中运行阻塞调用,如下所述:https://developer.nokia.com/Community/Wiki/Using_gsoap_for_web_services#Multithreading_for_non-blocking_calls

    【讨论】:

    • 我对这个解决方案很熟悉,我正在寻找另一种选择来实现这个目标。
    猜你喜欢
    • 1970-01-01
    • 2014-03-23
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多