使用gSoap的异步、确认、点对点连接
Asynchronous, acknowledged, point-to-point connection using gSoap
我的情况如下:
- 我有一个
wsdl
,"翻译"成这样的头文件:wsdl2h -o file.h file.wsdl
然后,执行 - 在"服务器端"再次,我使用
soap_init2
(与SOAP_IO_KEEPALIVE
),我有soap_bind
,soap_accept
,soap_copy
等,它似乎工作得很好(见下文) - 在"客户端",我使用生成的
proxy
对象(再次使用SOAP_IO_KEEPALIVE
),构造消息并将其发送到服务器 - "服务器"接收此消息并发回ACK(自定义
XML
) - "客户端"收到
ACK
,一切都很好。
soapcpp2 -Icorrect_path -j file.h
在"服务器端"上,我使用soapXXXService.[h|cpp]
实现了该服务。所以,我现在要做的是让"服务器"返回"real"响应到"客户端","客户端"必须返回一个ACK
到"服务器"。
这怎么可能?(应该是)
"你试过什么?"
我想起了两件事。
第一个是以某种方式重用套接字的文件描述符,从soap_accept
返回,将"真实响应"发送回服务器。但这可能吗?
Unix套接字是全双工的,所以这在技术上是可能的,但是gSoap
限制这一点吗?因为我在文档中没有看到任何关于这个的内容。
第二个选项,我想到的是在"客户端"中创建相同的"服务",以便有可能接收消息("真实响应")并以与"服务器"相同的方式返回ACK
。但这意味着,"服务器"必须也有一个proxy
对象的实例,以便能够发送这个所谓的"真实响应"。对我来说,这听起来真的很丑陋和可怕。如果这是唯一的选择,我不会感到惊讶,但是……
编辑:对于第二个选项-这意味着,客户端应该有一个侦听器端口,应该处理传入的连接,等等。听起来不像客户…
我明白,我可能错过了gSoap
如何工作的一些基本部分,但我阅读了整个用户文档和"入门"指南,我没有找到任何关于这一点的内容。
如果有什么不清楚的地方请告诉我
EDIT:这是我想要实现的场景:
- 客户端发送请求到服务器
- 服务器返回ACK作为响应(与标准ACK一样)-信号成功接收请求 之后,服务器发送响应给客户端(这是真正的响应)
- 客户端返回ACK再次-信号成功接收到响应
这个场景也可以是相反的方向:服务器也可以向客户端发送请求。这将意味着-与上面相同的场景,但替换"客户端" <-> "服务器"。
注意: request/response
和 ACK
SOAP消息。
我在我的问题中使用option 2
实现了它。即:在客户端和服务器中实现服务(侦听器)并使用代理(用于发送请求)。这样,我就有了以下内容:
- 服务器已启动
- 客户端启动(启动一个侦听器,即:"服务")
-
客户端发送SOAP请求(使用代理对象),告诉服务器:"我起来了,我的位置是xxx" (
xxx
是URI,它将用于连接服务器到客户端的监听器) - 服务器响应SOAP消息(ACK)(说:"OK, I see you're up now")
- 之后,服务器发送SOAP请求(通过代理对象)到客户端,使用在第一个消息中接收到的位置;此请求是
3.
中发送的请求的真实响应,这表示- "OK, I'm ready to communication with you"
客户端返回响应到这个请求(ACK)(说:"OK, cool")
这样,客户端和服务器都知道对方的位置,都有侦听器(服务的实现),维护代理对象。
似乎这对我有用。如果有人给我另一个选择,或者在我的问题中说一些关于option 1
的事情,我会很高兴的。
编辑:经过几天的深入研究和对协议的深入分析,我打算实现,看来,这是唯一的方法:
实现必须能够同时作为SOAP客户端和SOAP服务器
- 如何对点云数据进行排序
- 测试与浮点对齐
- 使用哪个 pcl 滤波器对点云进行下采样
- 找到所有可能的点对之间的力总和?
- 将对向量与int和点对向量
- XYZ两个GLM :: MAT4矩阵的距离点对点
- 如何正确地铺面浮点对
- MPI 点对点通信到集体通信
- 最近点对O(nlogn)算法——c++实现中的一些数据问题
- 根据点的坐标对点进行排序
- 根据其标记点对齐2个面部图像
- 使用较少STL运算符对点进行排序
- 使用C++11 lambda函数将点击事件连接到函数时出现问题
- 根据另一个向量对点向量进行排序
- 使用带有笛卡尔点的升压连接组件
- 在安卓和PC之间创建Wifi点对点连接
- Windows XP到Ubuntu Linux点对点通信使用Python或C/ c++
- 使用ZeroMQ构建点对点工作负载调度器是否有帮助?
- 使用gSoap的异步、确认、点对点连接
- 全局路由 结合无线网络和点对点连接时出错