modify README.md

This commit is contained in:
yumoqing 2019-07-10 18:29:37 +08:00
parent 2340f7073e
commit 7c837b3afa

275
README.md
View File

@ -51,7 +51,6 @@ 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",
@ -79,14 +78,16 @@ ahserver using json file format in its configuration, the following is a sample:
}, },
"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", "host":"0.0.0.0",
"port":8080, "port":8080,
"coding":"utf-8", "coding":"utf-8",
"ssl":{
"crtfile":"$[workdir]$/conf/www.xxx.com.pem",
"keyfile":"$[workdir]$/conf/www.xxx.com.key"
},
"indexes":[ "indexes":[
"index.html", "index.html",
"index.tmpl", "index.tmpl",
@ -94,12 +95,12 @@ ahserver using json file format in its configuration, the following is a sample:
"index.md" "index.md"
], ],
"visualcoding":{ "visualcoding":{
"default_root":"/vc/test", "default_root":"/samples/vc/test",
"userroot":{ "userroot":{
"ymq":"/vc/ymq", "ymq":"/samples/vc/ymq",
"root":"/vc/root" "root":"/samples/vc/root"
}, },
"jrjpath":"/vc/default" "jrjpath":"/samples/vc/default"
}, },
"processors":[ "processors":[
[".xlsxds","xlsxds"], [".xlsxds","xlsxds"],
@ -120,16 +121,9 @@ ahserver using json file format in its configuration, the following is a sample:
} }
} }
``` ```
### 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: