您的位置:首页 > 文旅 > 美景 > 【从零开始一步步学习VSOA开发】同步RPC客户端

【从零开始一步步学习VSOA开发】同步RPC客户端

2024/12/22 22:57:28 来源:https://blog.csdn.net/ScilogyHunter/article/details/140961940  浏览:    关键词:【从零开始一步步学习VSOA开发】同步RPC客户端

同步RPC客户端

概念

前面的测试例程都是以异步 RPC 的模式运行的,客户端调用 RPC 请求后无需等待服务端应答即可返回,后面通过回回调方式获取返回结果。
同步 RPC 即客户端在发送完毕请求后,函数进入阻塞模式一直等待,直到接受到服务端应答才唤醒并退出该函数,然后通过另外接口获取执行结果。
同步 RPC 前首先需要使用 vsoa_client_sync_create 创建 RPC 同步器,其次使用 vsoa_client_sync_call 进行同步的 RPC 调用,调用结束后,再用vsoa_parser_get_payload 获取服务端返回结果,最后用 vsoa_client_sync_delete 删除 RPC 同步器。
说明:

  • 一个 RPC 同步器在同一时刻只能执行一个 RPC 同步调用。
  • 多线程同时使用同一个 RPC 同步器是不允许的。
  • 建议为每一个线程创建一个同步器,线程内调用的所有同步命令都可以使用本线程的同步器。

程序源码

基于源客户端程序修改如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/select.h>
#include "vsoa_client.h"
#include "vsoa_cliauto.h"#define MY_SERVER_PASSWD                    "123456"static  int  sync_rpc(vsoa_client_t *client)
{vsoa_client_sync_call_t *sync = NULL;vsoa_url_t url;vsoa_payload_t send;bool ret;vsoa_header_t *vsoa_hdr;vsoa_payload_t payload;url.url     = "/echo";url.url_len = strlen(url.url);send.data = "1234567";send.data_len = strlen(send.data);send.param = "abcdefg";send.param_len = strlen(send.param);sync = vsoa_client_sync_create(true);ret = vsoa_client_sync_call(client, VSOA_CLIENT_RPC_METHOD_GET, &url, &send, sync, &vsoa_hdr, NULL);if (ret) {if (vsoa_hdr) {vsoa_parser_get_payload(vsoa_hdr, &payload);printf("echo message, param:%.*s, data:%.*s\n",(int)payload.param_len, payload.param,(int)payload.data_len, (char *)payload.data);}}vsoa_client_sync_delete(sync);return  (0);
}int main (int argc, char **argv)
{vsoa_client_t *client;vsoa_client_auto_t *cliauto;/** 创建客户端机器人*/cliauto = vsoa_client_auto_create(NULL, NULL);/** 由客户端机器人获取客户端对象*/client  = vsoa_client_auto_handle(cliauto);/** 启动客户端机器人*/vsoa_client_auto_start(cliauto, "vsoa://echo_server", MY_SERVER_PASSWD, NULL, 0, 1000, 1000, 1000);while (true) {/** 检查客户端是否正常链接到服务端*/if (vsoa_client_is_connect(client) == false) {continue;}/** 注册同步RPC请求*/sync_rpc(client);sleep(1);}
}

执行结果

使用同步 RPC 客户端程序替换原程序重复进行 echo 试验,结果如下:
服务端执行情况:
image.png
客户端执行情况:
image.png

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com