以下为授权转载的一盎司科技公众号文章
Tars是腾讯开源的基于名字服务的高性能RPC开发框架,也是一套开发模式,接下来我们将简单介绍C++开发服务中,引入Lua脚本语言来开发某些业务场景。关于框架的详细说明可参考官方文档(https://doc.tarsyun.com)。
以下继续完善上一个示例来作为参考,来说明具体的开发过程:
-
应用名APP: GoodsApp
-
服务名Server: GoodsServer,DataServer
-
服务提供者Servant: GoodsTarsObj,DataTarsObj
示例代码地址:
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
-
Python:3.10.4
-
Lua:5.4.6
上一篇我们初步实现了GoodsServer服务,调用了Lua脚本函数来组装请求,接下来我们继续完善整个处理流程。具体交互为,GoodsClient发请求到GoodsServer;GoodsServer调用Lua脚本组装数据,发送请求到DataServer;GoodsServer收到应答后调用Lua脚本处理应答,然后发送应答数据给GoodsClient。流程如下:

新增DataServer
主要用于给GoodsServer提供数据,协议如下:

简单实现接口,返回应答数据:

完善Lua组包解包
通过Lua解析yaml定义的分组和分组请求信息:

通过Lua组装请求数据:

转发请求到DataServer
首先获取服务调用代理,调用地址直接设置obj即可,不用设置具体IP和端口:

组装请求数据并发送,即设置DataReq的相关参数:

结果正常则获取应答数据,设置结果集用于Lua组装下个请求的入参:

测试客户端GoodsClient
这里客户端不在Tars框架注册,所以需要指定服务端的IP和端口,直接使用GoodsServer定义的GoodsTars.tars协议,实现简单的同步调用过程:

其中调用信息可以直接在Tars框架的web管理页面获取到:

测试结果:
-
GoodsServer端:

-
DataServer端:

-
GoodsClient端:

说明:
1.测试过程中,出现Lua脚本引用同目录下其他脚本,无法找到的问题,添加绝对路径后解决,需要看看有没有更好的处理方式;
2.打包过程需要将将Lua脚本和协议yaml文件一并打包上传,还需要调整打包上传脚本进一步实现;
3.目前Lua脚本打包后的JSON数据和协议定义请求应答序列化的JSON并不完全一致,有待进一步完善Lua脚本。完全匹配后直接可以使用协议中的readFromJsonString()函数来反序列化请求应答结构;
4.目前的方案是一种实验性质,需要验证与C++实现的性能对比,譬如耗时,然后根据业务需要来选择是否采用Lua脚本实现业务逻辑。

2495

被折叠的 条评论
为什么被折叠?



