Tars.js 开源项目教程

Tars.js 开源项目教程

Tars.js项目地址:https://gitcode.com/gh_mirrors/ta/Tars.js

项目介绍

Tars.js 是一个基于 Tars 体系研发的 JavaScript 框架,旨在帮助用户在不改变异构系统整体架构的情况下快速搭建(迁移)Node.js 服务。Tars.js 在腾讯内部经过 5 年多的沉淀与迭代,广泛应用于多个重要业务中,日承担了上百亿流量。Tars.js 包含多进程负载均衡与管理、代码异常监控与重启、服务日志搜集与处理等特性,支持 HTTP(s) 服务监控与用量自动上报,并支持用户自定义维度上报。

项目快速启动

安装依赖

首先,确保你已经安装了 Node.js 和 npm。然后,通过以下命令安装 Tars.js 的脚手架工具:

npm install -g @tars/nodetools-cli

初始化项目

使用脚手架工具初始化一个新的 Tars.js 项目:

nodetools init

编写 Tars 协议文件

创建一个 Tars 协议文件 Hello.tars,定义主被调双方通信的数据结构和调用接口:

module Hello {
    interface Test {
        int add(int a, int b, out int c);
    }
}

转换协议文件

使用 tars2node 工具将协议文件转换为 RPC 服务端代码:

tars2node --server Hello.tars

编写服务实现

创建一个实现文件 HelloImp.js,实现 Hello.Test 接口:

const { Tars } = require("@tars/rpc");
const Hello = require("./Hello.js");

class HelloImp extends Hello.TestImp {
    async add(a, b, c) {
        c.value = a + b;
        return 0;
    }
}

module.exports.HelloImp = HelloImp;

启动服务

创建入口文件 app.js,启动 Tars 服务:

const { Tars } = require("@tars/rpc");
const { HelloImp } = require("./HelloImp.js");

const impMap = {
    "Hello.Test.TestObj": HelloImp
};

Tars.server.getServant(process.env.TARS_CONFIG || `./${process.env.APP_NAME}.${process.env.SERVER_NAME}.config.conf`).forEach(function (config) {
    let svr = Tars.server.createServer(impMap[config.servant]);
    svr.start(config);
});

打包发布

使用 tars-deploy 模块打包发布服务:

npm install -g @tars/deploy
tars-deploy <服务名>

应用案例和最佳实践

Tars.js 在腾讯内部广泛应用于多个重要业务中,如腾讯QQ浏览器、腾讯桌面浏览器、腾讯地图等。最佳实践包括:

  • 多语言分布式协同开发:接入层由 Node.js 完成,逻辑(数据)层由 C++/GO/Python 实现。
  • 服务拆分:将原来的单一服务拆分为多个(逻辑)子服务,提高系统的可维护性和可扩展性。
  • 性能优化:使用前端(V8)优化技巧,如 FlattenString/FastProperties 等,尽量降低框架对业务性能的影响。

典型生态项目

Tars.js 提供了多个模块,支持 RPC 调用、日志、配置管理等功能。以下是一些典型生态项目:

  • @tars/rpc:Tars RPC 调用模块。
  • @tars/logs:日志组件,包含按大小、时间滚动的日志和远程日志。
  • @tars/config:用于在线获取服务配置文件。
  • @tars/monitor:提供服务监控、特性监控与 PP 监控上报支持。

通过这些模块,Tars.js 构建了一个完整的生态系统,支持用户在不同业务场景下的需求。

Tars.js项目地址:https://gitcode.com/gh_mirrors/ta/Tars.js

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这段代码是对压缩包文件进行进一步解压缩的过程,将压缩包文件中的子文件解压缩出来。具体来说: `print("Extracting sub-tars.")` 这行代码用来打印正在解压缩子文件的信息,方便用户查看。 `subpaths = sorted(glob.glob(os.path.join(datadir, "*.tar")))` 这行代码用来获取datadir目录中所有以.tar结尾的文件的路径,并将它们按字母顺序排序。这里使用了Python中的`glob`模块,它提供了一种简单的方法来获取指定目录下的文件路径。 `for subpath in tqdm(subpaths):` 这行代码表示对所有的.tar文件进行遍历,`tqdm`是一个第三方的库,可以显示进度条,方便查看程序执行的进度。 `subdir = subpath[:-len(".tar")]` 这行代码用来获取.tar文件的路径,去掉了文件扩展名.tar,得到了子文件的目录路径。例如,如果subpath='/path/to/subfile.tar',那么subdir='/path/to/subfile'。 `os.makedirs(subdir, exist_ok=True)` 这行代码用来创建子文件的目录,如果目录已经存在就不创建。 `with tarfile.open(subpath, "r:") as tar:` 这行代码用来打开tar子文件。其中,`subpath` 是子文件的路径,`"r:"` 表示以只读模式打开子文件。 `tar.extractall(path=subdir)` 这行代码用来将子文件解压缩并存储到指定的目录subdir中。`extractall` 方法会将子文件中的所有文件都提取出来,保存到指定目录下。在这里,`path=subdir` 表示要将提取出来的文件存储到subdir目录中。 总之,这段代码的作用是将压缩包文件中的子文件解压缩出来,并存储到指定的目录中,以便后续的数据集准备过程可以使用这些文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣宣廷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值