这是我的情况:
- 我有一个
wsdl
“翻译”成这样的头文件:wsdl2h -o file.h file.wsdl
- 然后,我执行了
soapcpp2 -Icorrect_path -j file.h
- 在“服务器端”我实现了服务,使用
soapXXXService.[h|cpp]
- 再次在“服务器端”,我使用
soap_init2
(withSOAP_IO_KEEPALIVE
),我有soap_bind
,soap_accept
,soap_copy
等,它似乎工作得很好(见下文) - 在“客户端”,我使用生成的
proxy
对象(再次使用SOAP_IO_KEEPALIVE
),构造消息并将其发送到服务器 - “服务器”收到此消息并发送回 ACK(自定义
XML
) - “客户”收到了
ACK
,一切都很好。
所以,我现在要做的是让“服务器”返回“真实”响应给“客户端”,而“客户端”必须返回一个ACK
给“服务器”。
这怎么可能?(它应该是)
“你试过什么?”
我想到了两件事。
第一个是以某种方式重用从 中返回的套接字的文件描述符soap_accept
,以将“真实响应”发送回服务器。但这可能吗?
Unix 套接字是全双工的,所以这在技术上是可行的,但是否gSoap
限制了这一点?因为我在文档中没有看到任何关于此的内容。
我想到的第二个选项是在“客户端”中创建相同的“服务”,以便接收消息(“真实响应”)并以ACK
与“服务器”中相同的方式返回. 但这意味着,“服务器”还必须有一个proxy
对象实例才能发送所谓的“真实响应”。
这对我来说听起来真的很丑陋和可怕。如果这是唯一的选择,我不会感到惊讶,但是..
编辑:对于第二个选项 - 这意味着客户端应该有一个侦听器端口,应该处理传入连接等。对我来说听起来不像一个客户端..
我了解,我可能遗漏了一些基本的gSoap
工作原理,但我阅读了整个用户文档和“入门”指南,但没有找到任何相关信息。
如果有什么不清楚的地方请告诉我
编辑:这是我想要实现的场景:
- 客户端向服务器发送请求
- 服务器返回ACK作为响应(如标准 ACK) - 表示成功接收到请求
- 稍后,服务器向客户端发送响应(这是真正的响应)
- 客户端再次返回ACK - 信号成功收到响应
这种情况也可能是相反的:服务器也可以向客户端发送请求。这意味着 - 与上述相同的场景,但替换“客户端”<->“服务器”。
注意:request/response
和都是SOAP 消息。ACK