首页 > 其他分享 >【从零开始一步步学习VSOA开发】创建VSOA的server端

【从零开始一步步学习VSOA开发】创建VSOA的server端

时间:2024-08-05 16:56:15浏览次数:19  
标签:addr vsoa url server VSOA 从零开始 服务端

创建VSOA的server端

创建工程

参考 hellovsoa 工程,创建 server 工程,工程源码修改如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "vsoa_platform.h"
#include "vsoa_server.h"

#define MY_SERVER_ADDR                      "0.0.0.0"
#define MY_SERVER_PORT                      (4001)
#define MY_SERVER_NAME                      "{\"name\":\"echo server\"}"
#define MY_SERVER_PASSWD                    "123456"


static void command_echo (void *arg, vsoa_server_t *server, vsoa_cli_id_t cid,
                          vsoa_header_t *vsoa_hdr, vsoa_url_t *url, vsoa_payload_t *payload)
{
    struct sockaddr_in addr_in;
    socklen_t          namelen = sizeof(addr_in);

    vsoa_server_cli_address(server, cid, (struct sockaddr *)&addr_in, &namelen);
    printf("client %d addr is %s:%d\n", cid, inet_ntoa(addr_in.sin_addr), ntohs(addr_in.sin_port));
    printf("message, url:%.*s, param:%.*s, data:%.*s\n",
           (int)url->url_len, url->url,
           (int)payload->param_len, payload->param,
           (int)payload->data_len, (char *)payload->data);

    vsoa_server_cli_reply(server, cid, 0, vsoa_parser_get_seqno(vsoa_hdr), 0, payload);
}

int main (int argc, char **argv)
{
    vsoa_server_t *server;

    /*
    * 创建服务端
    */
    server = vsoa_server_create(MY_SERVER_NAME);
    if (!server) {
        fprintf(stderr, "Can not create VSOA server!\n");
        return  (-1);
    }

    /*
    * 设置密码,设置为NULL,表示密码为空,客户端可以不输入密码
    */
    vsoa_server_passwd(server, MY_SERVER_PASSWD);

    /*
    * 创建RPC服务
    */
    vsoa_url_t url;
    url.url     = "/echo";
    url.url_len = strlen(url.url);
    vsoa_server_add_listener(server, &url, command_echo, NULL);

    /*
    * 启动微服务
    */
    struct sockaddr_in addr;
    bzero(&addr, sizeof(struct sockaddr_in));
    addr.sin_family      = AF_INET;
    addr.sin_port        = htons(MY_SERVER_PORT);
    addr.sin_addr.s_addr = inet_addr(MY_SERVER_ADDR);
    addr.sin_len         = sizeof(struct sockaddr_in);

    if (!vsoa_server_start(server, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))) {
        vsoa_server_close(server);
        fprintf(stderr, "Can not start VSOA server!\n");
        return  (-1);
    }

    /*
    * 进入监听事件循环
    */
    while (1) {
        int     cnt;
        int     max_fd;
        fd_set  fds;
        struct timespec timeout = {1, 0 };

        FD_ZERO(&fds);
        max_fd = vsoa_server_fds(server, &fds);

        cnt = pselect(max_fd + 1, &fds, NULL, NULL, &timeout, NULL);
        if (cnt > 0) {
            vsoa_server_input_fds(server, &fds);
        }
    }

    return (0);
}

源码分析:

  1. VSOA 服务端 API 函数更详细说明可以查看博客https://blog.csdn.net/ScilogyHunter/article/details/140816123
  2. server 端有一个固定框架:创建服务端,设置密码,创建RPC服务(可选),启动微服务和进入监听事件循环。所有服务端基本都按这个框架来写即可,只是配置参数和注册的服务依据实际需求而改动。
  3. 调用vsoa_server_create 函数里创建服务端对象,需要输入一个 json 字符串格式的参数,必须包含 name 字段的微服务名称。
  4. 密码必须设置,否则会认为设置了一个随机密码,影响正常通信,如果确实不想使用密码,输入参数可以设为 NULL。密码是一个没有任何安全加密的字符串,在当前版本中只是一个相对简单的安全管理。
  5. 创建RPC服务是可选项,也可以是发布订阅、数据流或数据报等,具体由业务需求决定。
  6. 启动微服务需要配置自身的 IP地址,支持 ipv4 和 ipv6,IP地址"0.0.0.0"表示任意或全部主机 IP,IP地址“127.0.0.1"表示自回环网卡 IP,只用于本机内部通信。如果开始时绑定的端口为 0,系统将自动分配一个端口。
  7. VSOA 微服务在启动成功之后,它应当始终监听所有的 VSOA 输入事件。
  8. 本示例程序中注册了一个 url 为"/echo"的 RPC 服务,当有客户端调用该服务时,会自动回调注册的command_echo 函数。该函数中限打印客户端信息和 message 信息,然后将接收的message 信息原样”反射“给客户端。
  9. VSOA payload 同时带载 param 和 data,param 推荐格式为 JSON,data 可以是普通二进制数据、字符串、json、 protobuf 等其他格式的载荷。总之不同数据类型使用不同的带载方式可以提高数据吞吐效率。

执行程序

编译、部署、并运行 server 程序,命令行会进入阻塞状态,等待客户端请求。
image.png

安装 vMessenge

VSOA Messenger(简称 vMessenger)是翼辉信息专为 VSOA 微服务开发而设计的测试仿真工具,提供 VSOA 客户端请求、环境变量、模拟服务器和 Proxy 代理管理等功能,方便开发者以更简单直观的方式进行 VSOA 客户端和服务端的开发、调试及数据模拟,从而提升产品开发效率和便利性。
在开发 VSOA 服务端时,开发者可以使用 vMessenger 创建客户端请求,向正在开发的服务端发送请求数据,以验证服务端是否可以正常响应。同样地,在开发 VSOA 客户端时,开发者可以通过 vMessenger 创建一个模拟服务器来模拟服务端接收请求,并返回相应的数据结构,以验证客户端请求信息的准确性。
下载地址:获取 vMessenger 安装包
下载完成后,双击安装包,按照提示安装即可。

使用 vMessenge 工具辅助测试

  1. 新建 vClient 集合。image.png

  2. 新建客户端请求,并配置名称。
    image.png
    image.png

  3. 配置服务端 URL 和密码。
    image.png

  4. 配置请求参数和请求数据。
    image.png
    image.png

  5. 发送请求并查看结果。
    image.png
    image.png

标签:addr,vsoa,url,server,VSOA,从零开始,服务端
From: https://blog.csdn.net/ScilogyHunter/article/details/140931261

相关文章

  • [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序:错误代码 0x2746 - 客户端无
    我正在尝试运行odoo项目ubuntu:22.04pyodbc==4.0.28python:3.8opensslversion:OpenSSL1.1.1p21Jun2022**ERROR:DIAG[08001][Microsoft][ODBCDriver17forSQLServer]TCPProvider:Errorcode0x2746DIAG[08001][Microsoft][ODBCDriver......
  • SQL Server 数据误删的恢复
    在日常的数据库管理中,数据的误删操作是难以避免的。为了确保数据的安全性和完整性,我们必须采取一些措施来进行数据的备份和恢复。本文将详细介绍如何在SQLServer中进行数据的备份和恢复操作,特别是在发生数据误删的情况下。假设我们已经开启了全量备份,并且在误操作之前有一个全......
  • 守护数据堡垒:SQL Server数据库自定义备份审计实现指南
    标题:守护数据堡垒:SQLServer数据库自定义备份审计实现指南引言数据库备份是确保数据安全和业务连续性的关键措施。SQLServer提供了多种备份策略,但有时候,为了满足特定的合规性要求或业务需求,我们需要实现更细粒度的自定义数据备份审计。本文将详细介绍如何在SQLServer中......
  • 索引的艺术:SQL Server数据库性能优化的索引设计策略
    索引的艺术:SQLServer数据库性能优化的索引设计策略在SQLServer数据库的浩瀚世界中,索引是提升查询性能的一把利剑。然而,索引的设计和使用并非一蹴而就,而是需要深思熟虑的策略。本文将深入探讨SQLServer中数据库性能优化时需要考虑的索引设计因素,带你领略索引设计的智慧。......
  • 数据安全堡垒:构建SQL Server自定义数据安全策略
    数据安全堡垒:构建SQLServer自定义数据安全策略在数字化时代,数据安全是企业的生命线。SQLServer作为企业级数据库解决方案,提供了丰富的安全特性来保护数据。然而,面对复杂的业务需求和不断演变的安全威胁,自定义数据安全策略显得尤为重要。本文将详细探讨如何在SQLServer中......
  • NLP从零开始------7基础文本处理之关键词提取
    1.关键词提取技术简介    在现代。文本是海量的信息中量最大的、使用最广泛的一种数据类型。这些信息数据虽然能为人们的生活提供便利。但是在提取有价值的信息时仍面临着困难。通过关键词提取可以快速地提取一篇新闻的关键信息。    关键词是能够反应文本主......
  • 从零开始的JAVAday29~day35
    后续语法if()语法若满足()中的语法,则执行后面的语句。循环for(a;b;c)和while(c)语法for(a;c;b)语法意思为在循环前进行a语句每次循环结束后进行b语法,若满足c语句则再次循环。whlie(c)循环若满足c条件则循环。......
  • SystemServer 进程的启动流程
    一、SystemServer 进程简介1. SystemServer进程主要的作用是启动各种系统服务,比如ActivityManagerService,PackageManagerService,WindowManagerService等各种服务。当我们的应用需要使用各种系统服务的时候也是通过与SystemServer进程通讯获取各种服......
  • NLP从零开始------6基础文本处理之命名实体识别
    1.命名实体识别介绍        命名实体识别(NamedEntityRecognition,NER)中的“命名实体”一般是指文本中具有特别意义或指代性非常强的实体(比如:人名,地名,时间或者机构组织等)。        命名实体可分为实体类、时间类和数字类3大类,以及人名、机构名、地名、时间......
  • 从零开始学逆向CTF比赛,免费参加,欢迎来玩!
    大家好,我是轩辕。告诉大家一个好消息:我准备了一次逆向CTF比赛,面向所有人开放,无需购买课程,优秀的小伙伴还有奖励,参赛方式在文末会介绍,欢迎大家一起来玩。举办这次CTF比赛,是为了检验大家从零开始学逆向的学习成果。就在不久前,我的这套视频课程终于完结了。不过要友情提醒一下,......