├── README-Eng.md ├── src ├── readme.md ├── Demo │ ├── View │ │ ├── Test │ │ │ └── Test.html │ │ └── Welcome │ │ │ └── Welcome.html │ └── Service │ │ ├── HttpCall.php │ │ └── NovaCall.php ├── Model │ └── Index │ │ ├── GetDBData.php │ │ └── GetCacheData.php └── Controller │ ├── Test │ └── ExceptionController.php │ └── Index │ └── IndexController.php ├── public └── index.html ├── resource ├── sql │ ├── readme.md │ ├── demo.php │ └── deamon │ │ └── mak.php ├── config │ ├── readme.md │ ├── qatest │ │ └── README.md │ ├── test │ │ ├── README.md │ │ ├── debug.php │ │ ├── loadBalancing.php │ │ ├── monitor │ │ │ ├── sql.php │ │ │ └── trace.php │ │ ├── log.php │ │ ├── cookie.php │ │ ├── connection │ │ │ ├── redis.php │ │ │ ├── nova.php │ │ │ ├── mysql.php │ │ │ └── tcp.php │ │ ├── service_discovery.php │ │ ├── server.php │ │ └── registry.php │ ├── online │ │ ├── debug.php │ │ ├── loadBalancing.php │ │ ├── monitor │ │ │ ├── sql.php │ │ │ └── trace.php │ │ ├── log.php │ │ ├── cookie.php │ │ ├── connection │ │ │ ├── redis.php │ │ │ ├── nova.php │ │ │ ├── mysql.php │ │ │ └── tcp.php │ │ ├── service_discovery.php │ │ ├── server.php │ │ └── registry.php │ └── share │ │ ├── rewrite.php │ │ ├── table │ │ └── demo.php │ │ ├── route.php │ │ ├── cache │ │ └── test.php │ │ ├── middleware.php │ │ └── path.php ├── middleware │ └── middleware.php ├── cache │ └── demo │ │ ├── test.php │ │ └── session.php ├── kvstore │ └── demo.php └── config.php ├── init ├── ServerStart │ └── readme.md ├── WorkerStart │ └── readme.md └── app.php ├── bin ├── httpd └── server ├── README.md ├── .gitignore ├── composer.json ├── phpunit.xml └── LICENSE /README-Eng.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resource/sql/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /init/ServerStart/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /init/WorkerStart/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resource/config/readme.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resource/config/qatest/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resource/config/test/README.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Demo/View/Test/Test.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resource/config/online/debug.php: -------------------------------------------------------------------------------- 1 | true, 5 | ]; -------------------------------------------------------------------------------- /resource/config/test/debug.php: -------------------------------------------------------------------------------- 1 | true, 5 | ]; -------------------------------------------------------------------------------- /resource/config/online/loadBalancing.php: -------------------------------------------------------------------------------- 1 | 'polling' 5 | ]; -------------------------------------------------------------------------------- /resource/config/online/monitor/sql.php: -------------------------------------------------------------------------------- 1 | "/tmp/sql.log" 5 | ]; -------------------------------------------------------------------------------- /resource/config/test/loadBalancing.php: -------------------------------------------------------------------------------- 1 | 'polling' 5 | ]; -------------------------------------------------------------------------------- /resource/config/test/monitor/sql.php: -------------------------------------------------------------------------------- 1 | "/tmp/sql.log" 5 | ]; -------------------------------------------------------------------------------- /resource/config/share/rewrite.php: -------------------------------------------------------------------------------- 1 | 'index/index/index' 5 | ]; -------------------------------------------------------------------------------- /resource/config/test/log.php: -------------------------------------------------------------------------------- 1 | 'log://info/debug.log?useBuffer=false&format=json', 5 | ]; -------------------------------------------------------------------------------- /resource/config/online/log.php: -------------------------------------------------------------------------------- 1 | 'log://info/debug.log?useBuffer=false&format=json', 5 | ]; -------------------------------------------------------------------------------- /resource/config/share/table/demo.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'TABLES', 6 | 'COLUMNS', 7 | ], 8 | ]; -------------------------------------------------------------------------------- /resource/config/test/monitor/trace.php: -------------------------------------------------------------------------------- 1 | true, 5 | "trace_class" => \Zan\Framework\Sdk\Trace\ZanTracer::class 6 | ]; -------------------------------------------------------------------------------- /resource/config/online/monitor/trace.php: -------------------------------------------------------------------------------- 1 | false, 5 | "trace_class" => \Zan\Framework\Sdk\Trace\ZanTracer::class 6 | ]; -------------------------------------------------------------------------------- /resource/config/share/route.php: -------------------------------------------------------------------------------- 1 | '/index', 5 | 'default_controller' => 'index', 6 | 'default_action' => 'index', 7 | 'default_format' => 'html', 8 | ]; -------------------------------------------------------------------------------- /bin/httpd: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | createHttpServer(); 8 | $server->start(); 9 | 10 | -------------------------------------------------------------------------------- /resource/middleware/middleware.php: -------------------------------------------------------------------------------- 1 | [ 5 | 6 | ], 7 | 'match' => [ 8 | ['/market\/.*/', 'acl'], 9 | ['/goods\/.*/', 'acl'], 10 | ['/shop\/.*/', 'acl'], 11 | ], 12 | ]; -------------------------------------------------------------------------------- /resource/cache/demo/test.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'connection' => 'redis.default_write', 6 | ], 7 | 'some_tpl' => [ 8 | 'key' => 'test_abc_%s_%s', 9 | 'exp' => 10 10 | ], 11 | ]; -------------------------------------------------------------------------------- /resource/config/test/cookie.php: -------------------------------------------------------------------------------- 1 | '.example.com', 5 | 'path' => '/', 6 | 'expire' => 2592000, 7 | 'secure' => FALSE, 8 | 'httponly' => FALSE, 9 | 'salt' => '', 10 | 'xss_filtering' => FALSE, 11 | ]; -------------------------------------------------------------------------------- /resource/config/online/cookie.php: -------------------------------------------------------------------------------- 1 | '.example.com', 5 | 'path' => '/', 6 | 'expire' => 2592000, 7 | 'secure' => FALSE, 8 | 'httponly' => FALSE, 9 | 'salt' => '', 10 | 'xss_filtering' => FALSE, 11 | ]; -------------------------------------------------------------------------------- /init/app.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'connection' => 'redis.default_write', 6 | ], 7 | 8 | 'session' => [ 9 | 'key' => 'PHPREDIS_SESSION:%s', 10 | 'exp' => 3600 * 24, 11 | ], 12 | ]; -------------------------------------------------------------------------------- /resource/config/share/cache/test.php: -------------------------------------------------------------------------------- 1 | 'redis.default_write', 10 | 'test' => [ 11 | 'key' => 'test_abc' 12 | ], 13 | ]; -------------------------------------------------------------------------------- /resource/kvstore/demo.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'connection' => 'kvstore.default', // 对应 connection/kvstore.php中配置 6 | ], 7 | 'cc' => [ 8 | 'key' => 'pic_ad_%d', 9 | 'exp' => 10, 10 | 'namespace' => 'youzan', 11 | 'set' => 'aaaatest' 12 | ], 13 | ]; -------------------------------------------------------------------------------- /resource/config/share/middleware.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'acl' => [ 6 | // XXX\Middleware\AclFilter::class, 7 | ], 8 | 9 | ], 10 | 'match' => [ 11 | ['/market\/.*/', 'acl'], 12 | ['/goods\/.*/', 'acl'], 13 | ['/shop\/.*/', 'acl'], 14 | ], 15 | ]; -------------------------------------------------------------------------------- /resource/config/share/path.php: -------------------------------------------------------------------------------- 1 | 'resource/sql/', 5 | 'log_path' => 'resource/log/', 6 | 'cache_path' => 'resource/cache/', 7 | 'model_path' => 'resource/model/', 8 | 'table_path' => 'resource/config/share/table/', 9 | 'connection_path' => 'resource/config/dev/connection/', 10 | ]; -------------------------------------------------------------------------------- /src/Demo/Service/HttpCall.php: -------------------------------------------------------------------------------- 1 | get("/data/sk/101110101.html"); 13 | } 14 | } -------------------------------------------------------------------------------- /src/Model/Index/GetDBData.php: -------------------------------------------------------------------------------- 1 | 2 13 | ]; 14 | //demo.demo_sql_id1_1对应resource/sql/demo.php中的配置 15 | yield Db::execute("demo.demo_sql_id1_1", $data); 16 | } 17 | } -------------------------------------------------------------------------------- /src/Model/Index/GetCacheData.php: -------------------------------------------------------------------------------- 1 | [ 6 | 'engine'=> 'redis', 7 | 'host' => '127.0.0.1', 8 | 'port' => 6379, 9 | 'pool' => [ 10 | 'maximum-connection-count' => 50, 11 | 'minimum-connection-count' => 2, 12 | 'heartbeat-time' => 35000, 13 | 'init-connection'=> 2, 14 | ], 15 | ], 16 | ]; 17 | -------------------------------------------------------------------------------- /resource/config/test/connection/redis.php: -------------------------------------------------------------------------------- 1 | [ 6 | 'engine'=> 'redis', 7 | 'host' => '127.0.0.1', 8 | 'port' => 6379, 9 | 'pool' => [ 10 | 'maximum-connection-count' => 50, 11 | 'minimum-connection-count' => 10, 12 | 'heartbeat-time' => 35000, 13 | 'init-connection'=> 2, 14 | ], 15 | ], 16 | ]; 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ZanHttpDemo 2 | zan php http server demo 3 | 4 | # 如何使用 5 | 6 | 1. 安装 [*zan扩展*](https://github.com/youzan/zan),编译参数:(`sockets` 与 `openssl` 可选) 7 | `./configure --enable-sockets --enable-openssl` 8 | 2. 安装[composer](curl -sS https://getcomposer.org/installer | php) 9 | 3. 在根目录下执行composer update 10 | 4. 配置php.ini 11 | ```ini 12 | zanphp.RUN_MODE = test 13 | zanphp.DEBUG = true 14 | ``` 15 | 5. 启动http server 16 | `php bin/httpd` 17 | 6. 访问`127.0.0.1:8030` -------------------------------------------------------------------------------- /resource/config.php: -------------------------------------------------------------------------------- 1 | APP_PATH . '/resource/config', 7 | 'cache_path' => APP_PATH . '/resource/cache', 8 | 'sql_path' => APP_PATH . '/resource/sql', 9 | 'pre_filter_path' => APP_PATH . '/init/PreFilter', 10 | 'post_filter_path' => APP_PATH . '/init/PostFilter', 11 | 'routing_path' => APP_PATH . '/init/routing', 12 | ]; -------------------------------------------------------------------------------- /resource/config/online/connection/nova.php: -------------------------------------------------------------------------------- 1 | 'novaClient', 5 | 'timeout' => 5000, 6 | 'persistent' => true, 7 | 'heartbeat-time' => 30000, 8 | 'load_balancing_strategy' => 'polling', 9 | 'config' => [ 10 | 'open_length_check' => 1, 11 | 'package_length_type' => 'N', 12 | 'package_length_offset' => 0, 13 | 'package_body_offset' => 0, 14 | 'open_nova_protocol' => 1 15 | ], 16 | ]; -------------------------------------------------------------------------------- /resource/config/test/connection/nova.php: -------------------------------------------------------------------------------- 1 | 'novaClient', 5 | 'timeout' => 5000, 6 | 'persistent' => true, 7 | 'heartbeat-time' => 30000, 8 | 'load_balancing_strategy' => 'polling', 9 | 'config' => [ 10 | 'open_length_check' => 1, 11 | 'package_length_type' => 'N', 12 | 'package_length_offset' => 0, 13 | 'package_body_offset' => 0, 14 | 'open_nova_protocol' => 1 15 | ], 16 | ]; -------------------------------------------------------------------------------- /resource/config/online/connection/mysql.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'engine'=> 'mysqli', 6 | 'host' => '127.0.0.1', 7 | 'user' => 'root', 8 | 'password' => '123456', 9 | 'database' => 'information_schema', 10 | 'port' => 3306, 11 | 'pool' => [ 12 | 'maximum-connection-count' => 50, 13 | 'minimum-connection-count' => 2, 14 | 'heartbeat-time' => 5000, 15 | 'init-connection'=> 2, 16 | ], 17 | ], 18 | ]; -------------------------------------------------------------------------------- /resource/config/test/connection/mysql.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'engine'=> 'mysqli', 6 | 'host' => '127.0.0.1', 7 | 'user' => 'root', 8 | 'password' => '123456', 9 | 'database' => 'information_schema', 10 | 'port' => 3306, 11 | 'pool' => [ 12 | 'maximum-connection-count' => 50, 13 | 'minimum-connection-count' => 5, 14 | 'heartbeat-time' => 5000, 15 | 'init-connection'=> 5, 16 | ], 17 | ], 18 | ]; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | !t/ 2 | *.seed 3 | *.log 4 | *.csv 5 | *.dat 6 | *.out 7 | *.pid 8 | *.gz 9 | pids 10 | logs 11 | node_modules 12 | *.sqlite 13 | .DS_Store 14 | .DS_Store? 15 | ._* 16 | .Spotlight-V100 17 | .Trashes 18 | ehthumbs.db 19 | Thumbs.db 20 | .idea/ 21 | iron.iml 22 | *.sublime-workspace 23 | *.sublime-project 24 | /nbproject/ 25 | .tm_properties 26 | .tags 27 | .tags_sorted_by_file 28 | .buildpath 29 | .project 30 | .settings/ 31 | .externalToolBuilders/ 32 | .sass-cache 33 | /xhprof* 34 | .vagrant 35 | composer.lock 36 | /vendor 37 | .private/ 38 | -------------------------------------------------------------------------------- /resource/config/test/service_discovery.php: -------------------------------------------------------------------------------- 1 | [ 7 | "tcp-demo" 8 | ], 9 | 10 | "novaApi" => [ 11 | "tcp-demo" => [ 12 | "path" => "vendor/nova-service/nova-demo/sdk/gen-php", 13 | "namespace" => "Com\\Yourcompany\\Demo\\", 14 | ] 15 | ], 16 | 17 | "connection" => [ 18 | "tcp-demo" => [ 19 | "host" => "127.0.0.1", 20 | "port" => 8100, 21 | ], 22 | ], 23 | */ 24 | ]; -------------------------------------------------------------------------------- /resource/config/online/service_discovery.php: -------------------------------------------------------------------------------- 1 | [ 8 | "tcp-demo" 9 | ], 10 | 11 | "novaApi" => [ 12 | "tcp-demo" => [ 13 | "path" => "vendor/nova-service/nova-demo/sdk/gen-php", 14 | "namespace" => "Com\\Yourcompany\\Demo\\", 15 | ] 16 | ], 17 | 18 | "connection" => [ 19 | "tcp-demo" => [ 20 | "host" => "127.0.0.1", 21 | "port" => 8100, 22 | ], 23 | ], 24 | */ 25 | ]; -------------------------------------------------------------------------------- /src/Demo/View/Welcome/Welcome.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |If you see this page, the zanphp web server is successfully installed and 16 | working. Further configuration is required.
17 | 18 |For online documentation and support please refer to
19 | zanphp.io.
Thank you for using zanphp.
22 | 23 | -------------------------------------------------------------------------------- /resource/config/test/connection/tcp.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'engine'=> 'tcp', 6 | 'host' => '127.0.0.1', 7 | 'port' => 2280, 8 | 'timeout' => 5000, 9 | 'hasRecv' => false, 10 | 'config' => [ 11 | 'open_length_check' => 1, 12 | 'package_length_type' => 'N', 13 | 'package_length_offset' => 0, 14 | 'package_body_offset' => 0, 15 | 'open_nova_protocol' => 1 16 | ], 17 | 'pool' => [ 18 | 'maximum-connection-count' => 5, 19 | 'minimum-connection-count' => 2, 20 | 'init-connection'=> 2, 21 | ], 22 | ], 23 | ]; 24 | -------------------------------------------------------------------------------- /resource/config/online/connection/tcp.php: -------------------------------------------------------------------------------- 1 | [ 5 | 'engine'=> 'tcp', 6 | 'host' => '127.0.0.1', 7 | 'port' => 2280, 8 | 'timeout' => 5000, 9 | 'hasRecv' => false, 10 | 'config' => [ 11 | 'open_length_check' => 1, 12 | 'package_length_type' => 'N', 13 | 'package_length_offset' => 0, 14 | 'package_body_offset' => 0, 15 | 'open_nova_protocol' => 1 16 | ], 17 | 'pool' => [ 18 | 'maximum-connection-count' => 5, 19 | 'minimum-connection-count' => 2, 20 | 'init-connection'=> 2, 21 | ], 22 | ], 23 | ]; 24 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zanphp/httpdemo", 3 | "repositories": { 4 | "packagist": { 5 | "type": "composer", 6 | "url": "https://packagist.phpcomposer.com" 7 | } 8 | }, 9 | "require": { 10 | "zanphp/zan": "dev-master", 11 | "nova-service/nova-demo": "dev-master" 12 | }, 13 | "autoload": { 14 | "psr-4": { 15 | "Com\\Youzan\\ZanHttpDemo\\": "src", 16 | "Com\\Youzan\\ZanHttpDemo\\Init\\": "init" 17 | } 18 | }, 19 | "config": { 20 | "preferred-install": "dist", 21 | "secure-http": false 22 | }, 23 | "prefer-stable": false, 24 | "minimum-stability": "dev" 25 | } 26 | -------------------------------------------------------------------------------- /resource/config/test/server.php: -------------------------------------------------------------------------------- 1 | '0.0.0.0', 5 | 'port' => 8030, 6 | 'config' => [ 7 | 'worker_num' => 2, 8 | 'dispatch_mode' => 3, 9 | ], 10 | 'monitor' =>[ 11 | 'max_request' => 100000, // 12 | 'max_live_time' => 1800000, //30m 13 | 'check_interval'=> 10000, //1s 14 | 'memory_limit' => 1.5 * 1024 * 1024 * 1024, //1.50G 15 | 'cpu_limit' => 70, 16 | 'debug' => false 17 | ], 18 | 'request_timeout' => 30 * 1000, 19 | 'session' => [ 20 | 'run' => true, 21 | 'store_key' => 'demo.session.session', 22 | ], 23 | ]; -------------------------------------------------------------------------------- /resource/config/online/server.php: -------------------------------------------------------------------------------- 1 | '0.0.0.0', 5 | 'port' => 8030, 6 | 'config' => [ 7 | 'worker_num' => 2, 8 | 'dispatch_mode' => 3, 9 | ], 10 | 'monitor' =>[ 11 | 'max_request' => 100000, // 12 | 'max_live_time' => 1800000, //30m 13 | 'check_interval'=> 10000, //1s 14 | 'memory_limit' => 1.5 * 1024 * 1024 * 1024, //1.50G 15 | 'cpu_limit' => 70, 16 | 'debug' => false 17 | ], 18 | 'request_timeout' => 30 * 1000, 19 | 'session' => [ 20 | 'run' => false, 21 | 'kv' => 'test.test.test', 22 | 'ttl' => 3600 * 24 23 | ], 24 | ]; -------------------------------------------------------------------------------- /src/Controller/Test/ExceptionController.php: -------------------------------------------------------------------------------- 1 | 2 |