topbit 1.0.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +128 -0
  2. package/README.cn.md +1562 -0
  3. package/README.md +1272 -0
  4. package/bin/app.js +17 -0
  5. package/bin/loadinfo.sh +18 -0
  6. package/bin/new-ctl.js +230 -0
  7. package/bin/newapp.js +22 -0
  8. package/cache/allow.js +130 -0
  9. package/cache/errserv.js +45 -0
  10. package/cache/minserv.js +167 -0
  11. package/cache/router.js +84 -0
  12. package/cache/rsa/localhost-cert.pem +19 -0
  13. package/cache/rsa/localhost-privkey.pem +28 -0
  14. package/cache/servsock.js +286 -0
  15. package/cache/sni.js +66 -0
  16. package/demo/allow.js +98 -0
  17. package/demo/group-api.js +161 -0
  18. package/demo/group-api2.js +109 -0
  19. package/demo/log.js +118 -0
  20. package/demo/memlimit.js +31 -0
  21. package/demo/min.js +7 -0
  22. package/demo/serv.js +15 -0
  23. package/images/middleware.jpg +0 -0
  24. package/images/titbit-middleware.png +0 -0
  25. package/images/titbit.png +0 -0
  26. package/package.json +38 -8
  27. package/src/bodyparser.js +420 -0
  28. package/src/connfilter.js +125 -0
  29. package/src/context1.js +166 -0
  30. package/src/context2.js +179 -0
  31. package/src/ctxpool.js +38 -0
  32. package/src/ext.js +318 -0
  33. package/src/fastParseUrl.js +426 -0
  34. package/src/headerLimit.js +18 -0
  35. package/src/http1.js +337 -0
  36. package/src/http2.js +337 -0
  37. package/src/httpc.js +251 -0
  38. package/src/loader/loader.js +999 -0
  39. package/src/logger.js +32 -0
  40. package/src/loggermsg.js +349 -0
  41. package/src/makeId.js +200 -0
  42. package/src/midcore.js +213 -0
  43. package/src/middleware1.js +104 -0
  44. package/src/middleware2.js +121 -0
  45. package/src/monitor.js +380 -0
  46. package/src/movefile.js +30 -0
  47. package/src/optionsCheck.js +54 -0
  48. package/src/randstring.js +23 -0
  49. package/src/router.js +682 -0
  50. package/src/sendmsg.js +27 -0
  51. package/src/strong.js +72 -0
  52. package/src/token/token.js +462 -0
  53. package/src/topbit.js +1291 -0
  54. package/src/versionCheck.js +31 -0
  55. package/test/test-bigctx.js +29 -0
  56. package/test/test-daemon-args.js +7 -0
  57. package/test/test-find.js +69 -0
  58. package/test/test-helper.js +81 -0
  59. package/test/test-route-sort.js +71 -0
  60. package/test/test-route.js +49 -0
  61. package/test/test-route2.js +51 -0
  62. package/test/test-run-args.js +7 -0
  63. package/test/test-url.js +52 -0
  64. package/tmp/buff-code +134 -0
  65. package/tmp/devplan +9 -0
  66. package/tmp/evt-test.js +34 -0
  67. package/tmp/fastParseUrl.js +302 -0
  68. package/tmp/router-rule.js +559 -0
  69. package/tmp/test-cdps.js +122 -0
  70. package/tmp/titbit.js +1286 -0
  71. package/main.js +0 -0
@@ -0,0 +1,161 @@
1
+ 'use strict'
2
+
3
+ const titbit = require('../lib/titbit.js')
4
+
5
+ const app = new titbit({
6
+ debug: true,
7
+ loadInfoFile: '--mem',
8
+ http2: true,
9
+ allowHTTP1: true,
10
+ key: __dirname + '/../cache/rsa/localhost-privkey.pem',
11
+ cert: __dirname + '/../cache/rsa/localhost-cert.pem'
12
+ })
13
+
14
+ /*
15
+ app.midware.addFinal = () => {
16
+ return async (c, next) => {
17
+ return c.reply.end('ok')
18
+ }
19
+ }
20
+
21
+ app.pre(async (c, next) => {
22
+ return c.reply.end('ok')
23
+ })
24
+ */
25
+
26
+ app.get('/home', async c => {
27
+ c.setHeader('x-key', Math.random()).sendHeader().send('home page')
28
+ }, '@home')
29
+
30
+ app.get('/', async c => {
31
+ for (let i = 0; i < 10; i++) {
32
+ c.write(`${i} ${Math.random()}\n`)
33
+ await c.ext.delay()
34
+ }
35
+ c.send('home page')
36
+ }, '@home')
37
+
38
+ app.use(async (ctx, next) => {
39
+ console.log('group', ctx.group, ctx.path)
40
+ await next()
41
+ console.log('group', ctx.group, ctx.path, 'end')
42
+ }, '@home')
43
+
44
+ let mid_timing = async (c, next) => {
45
+ console.log('time start')
46
+ console.time('request')
47
+ await next()
48
+ console.timeEnd('request')
49
+ }
50
+
51
+ app.trace('/o', async c => {})
52
+
53
+ app.use(async (c, next) => {
54
+ console.log('global request')
55
+ await next()
56
+ console.log('global request end\n')
57
+
58
+ }, {pre: true})
59
+
60
+ app.use(async (c, next) => {
61
+ console.log('global pre')
62
+ await next()
63
+ console.log('global pre end')
64
+
65
+ }, {pre: true})
66
+
67
+ app.router.group('/api', (route) => {
68
+ route.get('/test', async c => {
69
+ c.send('api test')
70
+ })
71
+
72
+ route.get('/stream', async c => {
73
+ for (let i = 0; i < 10; i++) {
74
+ await c.ext.delay(30)
75
+ c.write(`${i} ${Math.random()} ${Date.now()}\n`)
76
+ }
77
+ })
78
+
79
+ route.get('/:name', async c => {
80
+ c.send(c.param)
81
+ }, 'name')
82
+
83
+ route.use(async (ctx, next) => {
84
+ console.log('name test')
85
+ await next()
86
+ console.log('name test end')
87
+ }, 'name')
88
+
89
+ route.trace('/o', async c => {})
90
+ })
91
+ .use(async (c, next) => {
92
+ console.log(c.group, c.path, c.routepath)
93
+ await next()
94
+ })
95
+ .pre(async (c, next) => {
96
+ console.log('pre', c.method, c.headers)
97
+ await next()
98
+ })
99
+
100
+ app.middleware([mid_timing,], {pre: true}).group('验证', route => {
101
+ route.use(async (ctx, next) => {
102
+ console.log(' new route use test')
103
+ await next()
104
+ console.log(' new route use end')
105
+ })
106
+
107
+ route.get('/c/:o/:p', async c => {
108
+ console.log(c.group, c.name)
109
+ c.send(c.param)
110
+ })
111
+
112
+ route.middleware([
113
+ async (c, next) => {
114
+ console.log(' group sub test')
115
+ await next()
116
+ console.log(' group sub test end')
117
+ },
118
+
119
+ [
120
+ async (c, next) => {
121
+ console.log(' group sub test 2')
122
+ await next()
123
+ console.log(' group sub test 2 end')
124
+ },
125
+ {pre: false}
126
+ ]
127
+ ], {pre: true, tag: 'sub'}).group('sub', r => {
128
+
129
+ r.get('/oo', async c => {
130
+ c.send(c.group)
131
+ })
132
+
133
+ r.middleware(async (c, next) => {
134
+ console.log('sub sub test')
135
+ await next()
136
+ }).group('/sub', subr => {
137
+ subr.get('/ok', async c => {
138
+ c.send(c.group)
139
+ })
140
+ })
141
+
142
+ })
143
+
144
+ })
145
+
146
+ app.group('测试', route => {
147
+ route.get('/test', async c => {
148
+ console.log(c.group, c.name)
149
+ c.send('test ok')
150
+ }, 'test')
151
+ })
152
+ .use(async (c, next) => {
153
+ console.log('测试组')
154
+ await next()
155
+ })
156
+
157
+ app.daemon({port: 1234}, 2)
158
+
159
+ //app.run(1234)
160
+
161
+ //app.isWorker && console.log(app.midware.midGroup)
@@ -0,0 +1,109 @@
1
+ 'use strict'
2
+
3
+ const Titbit = require('../lib/titbit.js')
4
+
5
+ let app = new Titbit({
6
+ debug: true,
7
+ globalLog: true
8
+ })
9
+
10
+ let sub = app.group('/api')
11
+
12
+ sub.pre(async (ctx, next) => {
13
+ console.log('sub start')
14
+ await next()
15
+ console.log('sub end')
16
+ })
17
+
18
+ sub.get('/t', async ctx => {
19
+ ctx.send({
20
+ group: ctx.group,
21
+ path: ctx.path
22
+ })
23
+ })
24
+
25
+ let subsub = sub.group('/sub')
26
+
27
+ subsub.pre(async (ctx, next) => {
28
+ console.log('sub 2 start')
29
+ await next()
30
+ console.log('sub 2 end')
31
+ })
32
+ .get('/.ok', async ctx => {
33
+ ctx.send('ok')
34
+ })
35
+
36
+ subsub.get('/subt', async ctx => {
37
+ ctx.send({
38
+ group: ctx.group,
39
+ path: ctx.path
40
+ })
41
+ })
42
+
43
+ let ar = app.middleware([
44
+ async (ctx, next) => {
45
+ console.log('request timing start')
46
+ console.time('request')
47
+ await next()
48
+ console.timeEnd('request')
49
+ }
50
+ ], {pre: true}).group('/ar')
51
+
52
+ ar.get('/test', async ctx => {
53
+ ctx.send('test ar')
54
+ })
55
+
56
+ ar.post('/test', async ctx => {
57
+ ctx.send(ctx.body)
58
+ })
59
+
60
+ let arsub = ar.group('/s')
61
+
62
+ arsub.use(async (ctx, next) => {
63
+ console.log('ar sub start')
64
+ await next()
65
+ console.log('ar sub end')
66
+ })
67
+
68
+ arsub.get('/rich', async ctx => {
69
+ ctx.send('success')
70
+ })
71
+
72
+ app.post('/d', async ctx => {
73
+ ctx.send(ctx.body)
74
+ }, {group: 'data', name: 'data'})
75
+
76
+ app.post('/x', async ctx => {
77
+ ctx.send(ctx.body)
78
+ }, {group: 'data', name: 'x'})
79
+
80
+ app.put('/y/:id', async ctx => {
81
+ ctx.send({
82
+ param: ctx.param,
83
+ body: ctx.body
84
+ })
85
+ }, {group: 'data', name: 'y'})
86
+
87
+ app.pre(async (ctx, next) => {
88
+ console.log(ctx.group, ctx.path, 'start')
89
+ await next()
90
+ console.log(ctx.group, ctx.path, 'end')
91
+ }, '@data')
92
+
93
+ app.pre(async (ctx, next) => {
94
+ console.log(ctx.group, ctx.path, 'start', Math.random())
95
+ await next()
96
+ console.log(ctx.group, ctx.path, 'end', Math.random())
97
+ }, {group: 'data', name: 'x'})
98
+
99
+ app.pre(async (ctx, next) => {
100
+ console.log(ctx.group, ctx.path, ctx.routepath, 'start')
101
+ await next()
102
+ console.log(ctx.group, ctx.path, ctx.routepath, 'end')
103
+ }, {
104
+ group: 'data',
105
+ method: 'PUT',
106
+ name: 'y'
107
+ })
108
+
109
+ app.run(1235)
package/demo/log.js ADDED
@@ -0,0 +1,118 @@
1
+ const titbit = require('../lib/titbit.js');
2
+ const v8 = require('v8');
3
+ const cluster = require('cluster');
4
+
5
+ process.on('exit', (code) => {
6
+ console.log('EXIT CODE:', code);
7
+ });
8
+
9
+ /*
10
+ if (cluster.isWorker) {
11
+ setInterval(() => {
12
+ console.log(v8.getHeapStatistics());
13
+ }, 15000);
14
+ }
15
+ */
16
+
17
+ async function delay(t) {
18
+ return await new Promise((rv, rj) => {
19
+ setTimeout(() => {
20
+ rv();
21
+ }, t);
22
+ });
23
+ }
24
+
25
+ let app = new titbit({
26
+ debug: true,
27
+ globalLog : true,
28
+ //loadInfoType : 'text',
29
+ loadInfoFile : '/tmp/loadinfo.log',
30
+ timeout : 15000,
31
+ //socktimeout: 1000,
32
+ useLimit: true,
33
+ maxConn: 6000,
34
+ logType : 'file',
35
+ logFile: '/tmp/access.log',
36
+ errorLogFile : '/tmp/error.log',
37
+ logMaxLines: 10,
38
+ logHistory: 10
39
+ });
40
+
41
+ app.addService('name', 'brave');
42
+
43
+ var _key = 'abcdefghijklmnopqrstuvwxyz123456';
44
+
45
+ app.get('/', async c => {
46
+ c.data = 'success';
47
+ },{name:'home', group:'/'});
48
+
49
+ app.get('/uuid', async c => {
50
+ c.data = c.ext.uuid()
51
+ });
52
+
53
+ app.get('/timeout/:tm', async ctx => {
54
+ await new Promise((rv, rj) => {
55
+ setTimeout(() => {
56
+ rv()
57
+ }, parseInt(ctx.param.tm) || 10)
58
+ })
59
+
60
+ ctx.send(`timeout ok ${ctx.param.tm}`)
61
+ });
62
+
63
+ app.post('/p', async c => {
64
+ c.data = c.body;
65
+ });
66
+
67
+ app.get('/name', async c => {
68
+ c.data = c.service.name;
69
+ });
70
+
71
+ app.get('/tout', async c => {
72
+
73
+ await delay(1800);
74
+
75
+ c.response.write('handling...');
76
+
77
+ await delay(1000);
78
+
79
+ c.data = 'timeout test';
80
+ });
81
+
82
+ app.post('/tout', async c => {
83
+ await delay (119);
84
+
85
+ console.log('start');
86
+ c.response.write('start');
87
+
88
+ await delay (119);
89
+
90
+ console.log('not end');
91
+ c.response.write('start 2');
92
+
93
+ await delay(18000);
94
+
95
+ c.response.write('handling...');
96
+
97
+ await delay(10000);
98
+
99
+ c.data = 'timeout test' + JSON.stringify(c.body);
100
+ });
101
+
102
+ app.get('/encrypt', async c => {
103
+ c.data = c.helper.aesEncrypt(JSON.stringify(c.query), _key);
104
+ });
105
+
106
+ app.get('/decrypt', async c => {
107
+ c.data = c.helper.aesDecrypt(c.query.data, _key);
108
+ });
109
+
110
+ app.get('/sha256', async c => {
111
+ c.data = c.helper.sha256(`${Math.random()}${Date.now()}`);
112
+ });
113
+
114
+ //app.logger.watch();
115
+
116
+ app.sched('none')
117
+
118
+ app.daemon(2025, 2)
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ const titbit = require('../lib/titbit.js');
4
+
5
+ const cluster = require('cluster');
6
+
7
+ const app = new titbit({
8
+ maxBody : 100000000,
9
+ debug: true,
10
+ //showLoadInfo: false,
11
+ memFactor: -0.43,
12
+ loadInfoFile: '/tmp/loadinfo.log'
13
+ })
14
+
15
+ if (app.isWorker) {
16
+ app.addService('data', {})
17
+
18
+ setInterval(() => {
19
+ for (let i = 0; i < 100; i++)
20
+ app.service.data[ `${Math.random()}` ] = Date.now()
21
+ }, 5)
22
+ }
23
+
24
+
25
+ if (cluster.isMaster) {
26
+ setTimeout(() => {
27
+ console.log(app.secure);
28
+ }, 10);
29
+ }
30
+
31
+ app.daemon(1234, 9)
package/demo/min.js ADDED
@@ -0,0 +1,7 @@
1
+ const titbit = require('../lib/titbit.js');
2
+
3
+ const app = new titbit({
4
+ debug: true
5
+ })
6
+
7
+ app.run(1234)
package/demo/serv.js ADDED
@@ -0,0 +1,15 @@
1
+ const titbit = require('../lib/titbit.js')
2
+
3
+ const app = new titbit({
4
+ debug: true,
5
+ loadInfoFile: '--mem',
6
+ //http2: true,
7
+ key: __dirname + '/../cache/rsa/localhost-privkey.pem',
8
+ cert: __dirname + '/../cache/rsa/localhost-cert.pem'
9
+ })
10
+
11
+ app.get('/js', async ctx => {
12
+ await ctx.pipeText(__filename)
13
+ })
14
+
15
+ app.run(1230)
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,27 +1,57 @@
1
1
  {
2
2
  "name": "topbit",
3
- "version": "1.0.0",
4
- "description": "webserver",
3
+ "version": "2.0.0",
4
+ "description": "A Server-side web framework support http/1.1 and http/2",
5
+ "main": "src/topbit.js",
6
+ "directories": {
7
+ "src": "src"
8
+ },
9
+ "bin": {
10
+ "tbload": "bin/loadinfo.sh",
11
+ "topbit-new-app": "bin/newapp.js"
12
+ },
13
+ "scripts": {
14
+ "test": "node test/test-service.js",
15
+ "test-route": "node test/test-route.js"
16
+ },
5
17
  "keywords": [
6
- "web"
18
+ "top",
19
+ "topbit",
20
+ "tit",
21
+ "tibit",
22
+ "titbit",
23
+ "tidbit",
24
+ "bit",
25
+ "http",
26
+ "server",
27
+ "http/1.1",
28
+ "http/2",
29
+ "http2",
30
+ "web",
31
+ "middleware",
32
+ "framework",
33
+ "tidbit",
34
+ "proxy",
35
+ "webserver",
36
+ "backend",
37
+ "serverside"
7
38
  ],
8
- "homepage": "https://github.com/master-genius/nodebit#readme",
39
+ "homepage": "https://github.com/master-genius/topbit#readme",
9
40
  "bugs": {
10
- "url": "https://github.com/master-genius/nodebit/issues"
41
+ "url": "https://github.com/master-genius/topbit/issues"
11
42
  },
12
43
  "repository": {
13
44
  "type": "git",
14
- "url": "git+https://github.com/master-genius/nodebit.git"
45
+ "url": "git+https://github.com/master-genius/topbit.git"
15
46
  },
16
47
  "license": "ISC",
17
48
  "author": "BraveWang",
18
49
  "type": "commonjs",
19
- "main": "main.js",
20
50
  "scripts": {
21
51
  "test": "echo ok"
22
52
  },
23
53
  "dependencies": {
24
- "pg": "^8.11.3"
54
+
25
55
  },
26
56
  "devDependencies": {}
27
57
  }