我有一个现有的应用程序,它充当XML-RPC服务器 该服务器的客户端是在同一台计算机上运行的其他程序。
客户端形成与服务器的连接,使用XML-RPC调用命令,并等待响应。连接和传输协议的详细信息与此讨论无关。
可用命令集构成服务器与其客户端之间的版本化API 我可以随意更改服务器上的任何代码,也可以更改处理XML-RPC详细信息的客户端之间共享的库代码。
因此,我可以在我的实现中引入与XML-RPC规范的不兼容性 - 我控制服务器和客户端中的相关代码;什么都没有触及互联网。
我希望改进API,使得客户端调用的命令子集会生成两个单独的响应,每个响应都与原始请求相关联。
+--------+ +--------+
| | | |
| Client | | Server |
| | | |
+---+----+ +---+----+
| |
| request |
+--------------------> +-+
| |-|
| |-|
| initial response |-|
| <- - - - - - - - - - |-|
| |-|
| |-|
| ultimate response |-|
| <- - - - - - - - - - +-+
| |
+ +
客户端将具有不同的状态(因此将执行不同的任务),同时等待初始响应和最终响应。
我已经能够从服务器向客户端发送未经请求的“事件”,因此我可以通过生成表示初始响应的事件来解决此问题,然后使用现有的XML- RPC机制提供最终响应。但这非常不令人满意;为了客户代码的合理性,两个响应需要与原始请求相关联(即它们应该与id共享)。
我正在努力想象一种解决这个问题的简洁方法。
请注意,初始和最终响应必须是单独的XML节 具体来说,服务器必须能够在等待最终响应的同时向客户端发送未经请求的XML节(与请求无关)。