2013-05-10 98 views
11

这甚至可能吗?非阻塞RPC调用,使用gSoap

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

换句话说,我问的是request/response pattern,但 -blocking,就像描述here(3 选项)

相关Asynchronous, acknowledged, point-to-point connection using gSoap - 我想使(n)ack小号异步,太

+0

当您的WCLient执行SOAPRequest可以接收SOAPResponce(双向)或不接受(单向)时,WSClient始终会主动与WSServer交谈。但是这个行为是在服务描述(WSDL)上定义的。 – nms 2013-05-10 15:36:19

+0

@nms - 是的,但这不是我要求的。请检阅我的编辑。 – 2013-05-11 16:16:50

+0

看看:http://twistedmatrix.com/documents/current/historic/ipc10paper.html和http://stackoverflow.com/questions/5374968/is-network-event-based-programming-really-better 我认为这是你以后的样子。 – Stolas 2013-05-17 12:17:53

回答

0

我认为,基本用法是不可能的, 只有这样,才能使双向是通过响应

0“调用的结果”

但你可能想使用小窍门 1]建立在客户端的另一Server2上并调用服务器2从服务器 或者,如果那不是你能过,因为NAT /防火墙等
2]重构建您的API,因此互联网做该客户端会再次根据第一次响应的服务器调用服务器。

+1

是的,这是我能想到的唯一解决方案。这会起作用,但它仍然会阻止。所以,为了避免这种情况,必须启动一个新的线程。这就是我想要避免的。 – 2013-07-25 14:26:29

0

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

+0

是的,没有。是的 - 好像我可以做到这一点,我想过这个。和“否” - 我希望响应是通过相同的TCP **(或任何传输)连接(你建议将为两个方向创建2个连接) – 2013-07-25 14:30:33

0

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

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