介绍
TSW是一个反对抓包、全息日志、监控的基于Node.js的web server。 说人话 就是一个内置了日志采集、申请上报能力的http-server。
咱们能够把TSW看作是Nginx这样的Web-Server,也能够将其看作Koa+一些内置根底逻辑来实现的一个小型服务器
为什么应用TSW
大略是为了防止本人去解决日志存储、抓包相干的能力吧. TSW提供了如下一些能力:
- 基于多核多过程的负载平衡
- 优雅重启
- 谬误监控、性能监控; 告警推送
- 日志记录、存储;
- 染色抓包
TSW的装置
目前TSW官网提供了三种形式,然而npm的形式显然不晓得该如何操作, 从tsw代码组织来看,目前作为npm包来用是不太事实的。(官网文档中也没有给出npm装置形式如何配置和应用 纠正: 这里纠正曾经能够npm装置,请期待官网更新)。因而咱们暂且应用git clone的形式。
git clone https://github.com/Tencent/TSW.git
显然这是把TSW仓库的代码当做一个webserver代码来用。clone之后,再装置其本身的依赖:
cd TSW
npm install
官网文档里这里应用的命令是 npm install --no-optional
。 但实际上,从TSW的package.json中能够看到TSW本身并没有任何optionalDependencies,所以文档里的装置命令显然是多余的 (揭示: 这里官网会进行修复)。
目录构造
我这里只介绍几个对咱们来说有用的
— conf 这是TSW的配置目录
— bin 这是TSW的次要外围程序
— index.js 负责援用和启动TSW外围程序
— examples 这是业务站点的目录
大略能够理解了:
- conf目录是配置TSW的(如端口、监听IP等信息)
- examples目录下是咱们的业务逻辑,外面有个framework目录,能够反对独立的koa或express等类型的框架
启动入口
通过TSW/conf/config.js 能够发现,其间接把 examples/framework/config.js
导出,因而咱们能够间接在 framework/config.js
中配置站点。
另外留神到 framework/config.js
中有援用路由的一段代码:
// 路由
this.router = require('./router.js');
// router.js
// 定义一个路由表
const map = {
// http://127.0.0.1/egg
egg: './helloworld.egg/app.js',
// http://127.0.0.1/express
express: './express.js',
// http://127.0.0.1/koa
koa: './koa.js',
// http://127.0.0.1/other
default: './helloworld.js'
};
因而,TSW启动后,其实是加载了router.js中定义的路由,从而启动到对应的framework业务框架。
而对于业务框架来说,则不须要再本人启动webserver,只须要将对应的handler裸露给TSW即可. 例如对于KOA来说,能够这样:
module.exports = app;
奉献
TSW在社区方面还存在显著有余,我的通俗感知有以下有余:
- 代码标准和开源社区配套差
- 文档有余
- 必须拷贝源码应用,无奈基于npm生态应用
从TSW所解决的问题来看,感觉是在加强web开发的根底能力(如日志、监控等),防止反复开发。但换个角度想,这难道不应该做成一个web框架,而为何要做成一个web-server呢?
business --> web framework --> web-server --> nginx
TSW目前定位在web-server这里,但实际上做的事件并不像真正的webserver最应该关注的,但这个定位使得开发者能够自由选择express、koa等框架;如果退后一步定位再web framework层,我感觉也是个很好的解决方案,像egg/think一样,既能提供该有的日志等能力,又能提供更多简化web开发的能力。
前面能够钻研下是否帮助参加改良
发表回复