modify README.md
This commit is contained in:
parent
2340f7073e
commit
7c837b3afa
381
README.md
381
README.md
@ -51,85 +51,79 @@ if __name__ == '__main__':
|
|||||||
ahserver using json file format in its configuration, the following is a sample:
|
ahserver using json file format in its configuration, the following is a sample:
|
||||||
```
|
```
|
||||||
{
|
{
|
||||||
"debug":true,
|
"databases":{
|
||||||
"databases":{
|
|
||||||
"aiocfae":{
|
"aiocfae":{
|
||||||
"driver":"aiomysql",
|
"driver":"aiomysql",
|
||||||
"async_mode":true,
|
"async_mode":true,
|
||||||
"coding":"utf8",
|
"coding":"utf8",
|
||||||
"dbname":"cfae",
|
"dbname":"cfae",
|
||||||
"kwargs":{
|
"kwargs":{
|
||||||
"user":"test",
|
"user":"test",
|
||||||
"db":"cfae",
|
"db":"cfae",
|
||||||
"password":"test123",
|
"password":"test123",
|
||||||
"host":"localhost"
|
"host":"localhost"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cfae":{
|
"cfae":{
|
||||||
"driver":"mysql.connector",
|
"driver":"mysql.connector",
|
||||||
"coding":"utf8",
|
"coding":"utf8",
|
||||||
"dbname":"cfae",
|
"dbname":"cfae",
|
||||||
"kwargs":{
|
"kwargs":{
|
||||||
"user":"test",
|
"user":"test",
|
||||||
"db":"cfae",
|
"db":"cfae",
|
||||||
"password":"test123",
|
"password":"test123",
|
||||||
"host":"localhost"
|
"host":"localhost"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"website":{
|
"website":{
|
||||||
"paths":[
|
"paths":[
|
||||||
"/path/to/path1",
|
["$[workdir]$/../usedpkgs/antd","/antd"],
|
||||||
"/path/to/path2",
|
["$[workdir]$/../wolon",""]
|
||||||
"/path/to/path3",
|
],
|
||||||
"/path/to/path4"
|
"host":"0.0.0.0",
|
||||||
],
|
"port":8080,
|
||||||
"host":"0.0.0.0",
|
"coding":"utf-8",
|
||||||
"port":8080,
|
"ssl":{
|
||||||
"coding":"utf-8",
|
"crtfile":"$[workdir]$/conf/www.xxx.com.pem",
|
||||||
"indexes":[
|
"keyfile":"$[workdir]$/conf/www.xxx.com.key"
|
||||||
"index.html",
|
},
|
||||||
"index.tmpl",
|
"indexes":[
|
||||||
"index.dspy",
|
"index.html",
|
||||||
"index.md"
|
"index.tmpl",
|
||||||
],
|
"index.dspy",
|
||||||
"visualcoding":{
|
"index.md"
|
||||||
"default_root":"/vc/test",
|
],
|
||||||
"userroot":{
|
"visualcoding":{
|
||||||
"ymq":"/vc/ymq",
|
"default_root":"/samples/vc/test",
|
||||||
"root":"/vc/root"
|
"userroot":{
|
||||||
},
|
"ymq":"/samples/vc/ymq",
|
||||||
"jrjpath":"/vc/default"
|
"root":"/samples/vc/root"
|
||||||
},
|
},
|
||||||
"processors":[
|
"jrjpath":"/samples/vc/default"
|
||||||
[".xlsxds","xlsxds"],
|
},
|
||||||
[".sqlds","sqlds"],
|
"processors":[
|
||||||
[".tmpl.js","tmpl"],
|
[".xlsxds","xlsxds"],
|
||||||
[".tmpl.css","tmpl"],
|
[".sqlds","sqlds"],
|
||||||
[".html.tmpl","tmpl"],
|
[".tmpl.js","tmpl"],
|
||||||
[".tmpl","tmpl"],
|
[".tmpl.css","tmpl"],
|
||||||
[".dspy","dspy"],
|
[".html.tmpl","tmpl"],
|
||||||
[".md","md"]
|
[".tmpl","tmpl"],
|
||||||
]
|
[".dspy","dspy"],
|
||||||
},
|
[".md","md"]
|
||||||
"langMapping":{
|
]
|
||||||
"zh-Hans-CN":"zh-cn",
|
},
|
||||||
"zh-CN":"zh-cn",
|
"langMapping":{
|
||||||
"en-us":"en",
|
"zh-Hans-CN":"zh-cn",
|
||||||
"en-US":"en"
|
"zh-CN":"zh-cn",
|
||||||
}
|
"en-us":"en",
|
||||||
|
"en-US":"en"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### run mode configuration
|
|
||||||
if want viboraserver running in debug mode, just add a key-value pairs in config.json
|
|
||||||
```
|
|
||||||
"debug":true,
|
|
||||||
```
|
|
||||||
else just delete this key-value in config.json in conf folder
|
|
||||||
|
|
||||||
### database configuration
|
### database configuration
|
||||||
viboraserver support database data operations, corrently, it ***ONLY*** support synchronous DBAPI2.
|
the ahserver using packages for database engines are:
|
||||||
the viboraserver using packages for database engines are:
|
|
||||||
* oracle:cx_Oracle
|
* oracle:cx_Oracle
|
||||||
* mysql:mysql-connector
|
* mysql:mysql-connector
|
||||||
* postgresql:psycopg2
|
* postgresql:psycopg2
|
||||||
@ -200,262 +194,41 @@ the dbname and "db" should the same, which is the database name in mysql databas
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
### https support
|
||||||
|
|
||||||
|
In config.json file, config.website.ssl need to set(see above)
|
||||||
|
|
||||||
### website configuration
|
### website configuration
|
||||||
#### paths
|
#### paths
|
||||||
viboraserver can serve its contents (static file, dynamic contents render by its processors) resided on difference folders in the server file system.
|
ahserver can serve its contents (static file, dynamic contents render by its processors) resided on difference folders on the server file system.
|
||||||
viboraserver finds a content identified by http url in order the of the paths specified by "paths" lists inside "website" definition of config.json file
|
ahserver finds a content identified by http url in order the of the paths specified by "paths" lists inside "website" definition of config.json file
|
||||||
#### processors
|
#### processors
|
||||||
all the prcessors viboraserver using, must be listed here.
|
all the prcessors ahserver using, must be listed here.
|
||||||
#### host
|
#### host
|
||||||
by defaualt, '0.0.0.0'
|
by defaualt, '0.0.0.0'
|
||||||
#### port
|
#### port
|
||||||
by default, 8080
|
by default, 8080
|
||||||
#### coding
|
#### coding
|
||||||
viboraserver recomments using 'utf-8'
|
ahserver recomments using 'utf-8'
|
||||||
#### indexes
|
|
||||||
default content file names, viboraserver will use first found file names in the folder
|
|
||||||
|
|
||||||
### langMapping
|
### langMapping
|
||||||
|
|
||||||
the browsers will send 'Accept-Language' are difference even if the same language. so viboraserver using a "langMapping" definition to mapping multiple browser lang to same i18n file
|
the browsers will send 'Accept-Language' are difference even if the same language. so ahserver using a "langMapping" definition to mapping multiple browser lang to same i18n file
|
||||||
|
|
||||||
|
|
||||||
## international
|
## international
|
||||||
|
|
||||||
viboraserver using MiniI18N in appPublic modules in pyutils package to implements i18n support
|
ahserver using MiniI18N in appPublic modules in pyutils package to implements i18n support
|
||||||
|
|
||||||
it will search translate text in ms* txt file in folder named by language name inside i18n folder in workdir folder, workdir is the folder where the viboraserver program resided or identified by command line paraments.
|
it will search translate text in ms* txt file in folder named by language name inside i18n folder in workdir folder, workdir is the folder where the ahserver program resided or identified by command line paraments.
|
||||||
|
|
||||||
## performance
|
## performance
|
||||||
|
|
||||||
You can find "Hello world" performance about viboraserver in [vibora](https://github.com/vibora-io/vibora) main page
|
To be list here
|
||||||
|
|
||||||
viboraserver will list and performance test for its processors later
|
|
||||||
### test macheine
|
|
||||||
xiaomi pro 15.6 i7 cpu, 16Gb memory,m2 256G disk
|
|
||||||
os: ubuntu 18.4
|
|
||||||
vibora 0.0.7
|
|
||||||
### static file
|
|
||||||
```
|
|
||||||
Running 30s test @ http://localhost:8080/swift/books/hub/welcome.htm
|
|
||||||
12 threads and 400 connections
|
|
||||||
Thread Stats Avg Stdev Max +/- Stdev
|
|
||||||
Latency 24.53ms 25.42ms 461.06ms 95.70%
|
|
||||||
Req/Sec 1.50k 320.16 4.00k 69.29%
|
|
||||||
533944 requests in 30.10s, 414.67MB read
|
|
||||||
Socket errors: connect 0, read 177, write 0, timeout 0
|
|
||||||
Non-2xx or 3xx responses: 162164
|
|
||||||
Requests/sec: 17740.03
|
|
||||||
Transfer/sec: 13.78MB
|
|
||||||
```
|
|
||||||
|
|
||||||
welcome.htm file size:
|
|
||||||
```
|
|
||||||
-rw-rw-r-- 1 ymq ymq 952 12月 12 2017 welcome.htm
|
|
||||||
```
|
|
||||||
### dspy processor
|
|
||||||
|
|
||||||
```
|
|
||||||
Running 30s test @ http://localhost:8080/estate/functionlists.dspy
|
|
||||||
12 threads and 400 connections
|
|
||||||
Thread Stats Avg Stdev Max +/- Stdev
|
|
||||||
Latency 35.18ms 17.45ms 187.20ms 73.62%
|
|
||||||
Req/Sec 0.96k 230.18 2.16k 66.82%
|
|
||||||
343789 requests in 30.09s, 726.22MB read
|
|
||||||
Requests/sec: 11426.72
|
|
||||||
Transfer/sec: 24.14MB
|
|
||||||
```
|
|
||||||
|
|
||||||
functionlists.dspy
|
|
||||||
```
|
|
||||||
selfserv = [
|
|
||||||
{
|
|
||||||
"funcid":"0.1",
|
|
||||||
"text":"用户注册"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"0.2",
|
|
||||||
"text":"用户签到"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"0.3",
|
|
||||||
"text":"修改密码"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"0.4",
|
|
||||||
"text":"用户签退"
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
saving = [
|
|
||||||
{
|
|
||||||
"funcid":"1.1",
|
|
||||||
"text":"我的存房"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"1.2",
|
|
||||||
"text":"存房收藏"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"1.3",
|
|
||||||
"text":"不动产录入"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
rentfin = [
|
|
||||||
{
|
|
||||||
"funcid":"3.1",
|
|
||||||
"text":"融房收藏"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"3.2",
|
|
||||||
"text":"我的融房"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"3.3",
|
|
||||||
"text":"新增融房"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"3.4",
|
|
||||||
"text":"融房标准协议"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"3.5",
|
|
||||||
"text":"打包资产"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
return [
|
|
||||||
{
|
|
||||||
"funcid":"99",
|
|
||||||
"text":"首页"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"0",
|
|
||||||
"text":"自服务",
|
|
||||||
"state":"open",
|
|
||||||
"children":selfserv
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"1",
|
|
||||||
"text":"存房",
|
|
||||||
"state":"open",
|
|
||||||
"children":saving
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"2",
|
|
||||||
"text":"优房"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"3",
|
|
||||||
"text":"融房",
|
|
||||||
"state":"open",
|
|
||||||
"children":rentfin
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"4",
|
|
||||||
"text":"获房"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"5",
|
|
||||||
"text":"运房"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"funcid":"6",
|
|
||||||
"text":"出房"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
### Data read from database
|
|
||||||
|
|
||||||
Test performance for asynchronous dbapi2 driver, here is aiomysql
|
|
||||||
```
|
|
||||||
wrk -c400 -d30s -t4 http://localhost/asql.dspy
|
|
||||||
Running 30s test @ http://localhost/asql.dspy
|
|
||||||
4 threads and 400 connections
|
|
||||||
Thread Stats Avg Stdev Max +/- Stdev
|
|
||||||
Latency 189.76ms 137.67ms 1.82s 77.66%
|
|
||||||
Req/Sec 401.46 63.01 660.00 72.29%
|
|
||||||
47950 requests in 30.07s, 188.03MB read
|
|
||||||
Non-2xx or 3xx responses: 13
|
|
||||||
Requests/sec: 1594.83
|
|
||||||
Transfer/sec: 6.25MB
|
|
||||||
```
|
|
||||||
asql.dspy(aiomysql)
|
|
||||||
```
|
|
||||||
@runSQLPaging
|
|
||||||
def sql(db,ns):
|
|
||||||
return {
|
|
||||||
|
|
||||||
"sql_string":"select * from product"
|
|
||||||
}
|
|
||||||
|
|
||||||
return await sql('aiocfae',{"page":1,"rows":10,"sort":"productid"})
|
|
||||||
```
|
|
||||||
and synchronous dbapi2 driver(mysql-connector)
|
|
||||||
```
|
|
||||||
wrk -c400 -d30s -t4 http://localhost/sql.dspy
|
|
||||||
Running 30s test @ http://localhost/sql.dspy
|
|
||||||
4 threads and 400 connections
|
|
||||||
Thread Stats Avg Stdev Max +/- Stdev
|
|
||||||
Latency 221.07ms 80.60ms 687.16ms 72.53%
|
|
||||||
Req/Sec 351.23 121.12 686.00 66.67%
|
|
||||||
41997 requests in 30.06s, 164.73MB read
|
|
||||||
Requests/sec: 1397.07
|
|
||||||
Transfer/sec: 5.48MB
|
|
||||||
```
|
|
||||||
sql.dspy(mysql-connector)
|
|
||||||
```
|
|
||||||
@runSQLPaging
|
|
||||||
def sql(db,ns):
|
|
||||||
return {
|
|
||||||
|
|
||||||
"sql_string":"select * from product"
|
|
||||||
}
|
|
||||||
|
|
||||||
return await sql('cfae',{"page":1,"rows":10,"sort":"productid"})
|
|
||||||
```
|
|
||||||
### tmpl processor
|
|
||||||
|
|
||||||
```
|
|
||||||
Running 30s test @ http://localhost:8080/estate/saving/index.tmpl
|
|
||||||
12 threads and 400 connections
|
|
||||||
Thread Stats Avg Stdev Max +/- Stdev
|
|
||||||
Latency 27.53ms 14.34ms 172.99ms 73.75%
|
|
||||||
Req/Sec 1.23k 294.38 2.57k 67.73%
|
|
||||||
441885 requests in 30.09s, 246.53MB read
|
|
||||||
Requests/sec: 14685.00
|
|
||||||
Transfer/sec: 8.19MB
|
|
||||||
```
|
|
||||||
|
|
||||||
/estate/saving/index.tmpl is:
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"__ctmpl__":"layout",
|
|
||||||
"data":{
|
|
||||||
"regions":{
|
|
||||||
"north":{
|
|
||||||
"height":"50px",
|
|
||||||
"remoteWidgets":[
|
|
||||||
"{{absurl(request,'./searchform.tmpl')}}"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"center":{
|
|
||||||
"remoteWidgets":[
|
|
||||||
"{{absurl(request,'./estateView.tmpl')}}"
|
|
||||||
]
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"__metadata__":{
|
|
||||||
"__jename__":"layout"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
## environment for processors
|
## environment for processors
|
||||||
|
|
||||||
When coding in processors, viboraserver provide some environment stuff for build apllication, there are modules, functions, classes and variables
|
When coding in processors, ahserver provide some environment stuff for build apllication, there are modules, functions, classes and variables
|
||||||
|
|
||||||
|
|
||||||
### modules:
|
### modules:
|
||||||
|
Loading…
Reference in New Issue
Block a user