Tars微服务框架C++开发之JSON

以下为授权转载的一盎司科技公众号文章


Tars是腾讯开源的基于名字服务的高性能RPC开发框架,也是一套开发模式,接下来我们将简单介绍C++开发服务中,JSON数据类型的使用,具体说明可参考官方文档(https://doc.tarsyun.com)。

以下将Tars框架中JSON处理的相关类,封装为更易于使用的Json和JsonParser类,并以一个示例来作为参考。

示例代码地址:

GitHub地址:https://github.com/iounce/tars-demo

Gitee地址:https://gitee.com/iounce_admin/tars-demo

环境

  • Windows操作系统:Windows10(21H2,19044.1766)

  • Linux操作系统:Ubuntu 22.04 LTS

  • Docker Desktop:v4.10.1

  • Tars framework: 3.0.14

Tars框架JSON类

Tars框架自带JSON处理类,主要包括tars::JsonInput,tars::JsonOutput,tars::TC_Json,tars::JsonValue,tars::JsonValueObj等,在编译Tars协议文件后自动生成的头文件中比较常见,如下所示:

图片

接下来,我们将上述JSON常用类封装为更易于使用的处理类。

Json封装类

自定义封装类Json主要用于构造JSON格式的数据,然后可以输出字符串格式的json内容,主要包含各种类型的addValue函数,如int,double,string等。具体如下:

图片

其中,主要使用JsonValueObj类来保存数据,充分利用JsonOutput类丰富的转换函数来构造各类json数据类型:

图片

最后使用TC_Json类将构造的JSON数据转换为字符串:

图片

JsonParser封装类

自定义封装类JsonParser主要用于解析JSON格式的字符串,然后可以获取各类JSON类型的数据,主要包含各类getValue函数。具体如下:

图片

其中主要使用JsonValueObj类来保存解析后的JSON数据,充分利用JsonInput类丰富的转换函数来获取各类json数据类型:

图片

编写测试

  • 构造并输出JSON字符串:

图片

  • 解析并获取JSON数据:

图片

说明:

  1. 示例程序基于docker安装的Tars框架来编译,可以使用docker命令拷贝文件,如:

    docker cp -a D:\iounce\src\tars\TarsUtils\json 84d040a770c1:/root/TarsUtils

  2. Tars中大量使用了智能指针,方便内存管理,如JsonValueObjPtr。

### 腾讯后端开发框架和技术栈 腾讯作为中国领先的互联网科技公司之一,在其庞大的业务体系下,采用了多种成熟的技术栈和自研框架来支持不同的应用场景。以下是腾讯后端开发中常见的技术和框架: #### 1. **基础技术栈** 腾讯的后端开发通常依赖于一些通用的基础技术栈,这些技术广泛应用于各个项目中: - **数据库**: MySQL 是腾讯内部最常用的开源关系型数据库[^3]。此外,腾讯还自主研发了 TDSQL 和 CynosDB 等分布式数据库产品。 - **缓存系统**: Redis 是腾讯常用的一种内存级键值存储系统,用于提升应用性能和降低数据库压力。 - **Web服务器**: Nginx 是腾讯后端服务中的重要组件,主要用于反向代理、负载均衡以及静态资源分发。 #### 2. **微服务架构** 随着业务规模的增长,腾讯逐渐转向基于微服务的设计模式。以下是一些核心技术和框架: - **Spring生态**: Spring Boot 和 Spring Cloud 是腾讯在 Java 领域的主要选择,它们提供了快速构建微服务的能力[^2]。 - **TARS框架**: 这是由腾讯开源的一个高性能 RPC 框架,支持多语言(C++/Go/Java/PHP/Python),适用于大规模分布式系统的开发[^1]。 #### 3. **消息中间件** 为了满足高并发场景下的异步处理需求,腾讯引入并优化了一些主流的消息队列方案: - **Kafka/RocketMQ**: 在日志收集、实时数据分析等领域有广泛应用。 - **TubeMQ**: 自主研发的一款高效可靠的消息中间件,专为海量数据传输而设计。 #### 4. **容器化与编排** 腾讯积极拥抱云计算趋势,大力推动容器化部署及其管理平台建设: - **Docker/Kubernetes (KEP)**: 使用 Docker 容器镜像打包应用程序,并通过 Kubernetes 实现自动化调度运行实例群组操作维护等工作流程标准化目标达成效率最大化效果显著优于传统方式;同时结合自身特点打造专属版本即 KEP(K8S Enhanced Platform). #### 5. **大数据与AI** 针对日益增长的数据量及智能化转型诉求,腾讯也布局了一系列相关工具链和服务接口供开发者调用集成至各自的产品线当中去发挥更大价值创造更多可能性空间出来供大家探索实践检验真理标准唯一途径就是行动起来吧朋友们加油干就完了哈! ```python from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile, HttpProfile from tencentcloud.cvm.v20170312 import cvm_client, models def create_cvm_instance(): cred = credential.Credential("SECRET_ID", "SECRET_KEY") http_profile = HttpProfile() http_profile.endpoint = "cvm.tencentcloudapi.com" client_profile = ClientProfile() client_profile.httpProfile = http_profile client = cvm_client.CvmClient(cred, "ap-guangzhou", client_profile) request = models.RunInstancesRequest() params = { 'Placement': {'Zone': 'ap-guangzhou-2'}, 'InstanceChargeType': 'POSTPAID_BY_HOUR', 'ImageId': 'img-r60o7x39', 'InternetAccessible': {'PublicIpAssigned': True}, 'InstanceType': 'S2.SMALL1', 'SystemDisk': {'DiskType': 'CLOUD_SSD', 'DiskSize': 50}, 'DataDisks': [{'DiskType': 'CLOUD_PREMIUM', 'DiskSize': 100}], 'VirtualPrivateCloud': {'VpcId': 'vpc-k7hiztjw', 'SubnetId': 'subnet-pxpfo0vx'}, 'LoginSettings': {'KeyIds': ['skey-5kjlbmup']}, 'SecurityGroupIds': ['sg-n9yqbukb'], 'InstanceName': 'test-instance' } request.from_json_string(json.dumps(params)) response = client.RunInstances(request) return response.to_json_string() print(create_cvm_instance()) ``` 此代码片段展示了如何利用腾讯云 SDK 创建一台新的 CVM 实例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值