phvia / firman
PHP多进程和非阻塞I/O库。
dev-master / 0.0.x-dev
2018-10-10 04:31 UTC
Requires
- php: >=7.0
- symfony/console: ~4.0.6
Requires (Dev)
- phpunit/phpunit: ~6.5.7
Suggests
- php: Suggest to install newest PHP for high performance.
This package is auto-updated.
Last update: 2024-09-10 21:01:53 UTC
README
PHP多进程和非阻塞I/O库。
依赖项
- PHP≥7。(用于新功能和高性能)
- PCNTL扩展。(编译PHP时使用
--enable-pcntl
选项启用) - 套接字扩展。(编译PHP时使用
--enable-sockets
选项启用)
安装
$ composer require phvia/firman:dev-master
运行示例
- 显示用法
$ php /path/to/firman/examples/via_websocket_serv_builtin.php Firman package 0.0.1 Usage: command [options] [arguments] Options: -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug Available commands: help Displays help for a command list Lists commands restart Restart Firman server start Start Firman server stop Stop Firman server
- 显示用法详情
$ php /path/to/firman/examples/via_websocket_serv_builtin.php start -h Usage: start [options] Options: -e, --env=ENV The Environment name (support: dev, prod) [default: "dev"] -h, --help Display this help message -q, --quiet Do not output any message -V, --version Display this application version --ansi Force ANSI output --no-ansi Disable ANSI output -n, --no-interaction Do not ask any interactive question -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug Help: Start Firman server
- 进程控制
# After start server, you can access examples/ws.html in web browser $ php examples/via_websocket_serv_builtin.php start # Restart Firman server $ php examples/via_websocket_serv_builtin.php restart # Stop Firman server $ php examples/via_websocket_serv_builtin.php stop
- 以守护进程运行
$ php /path/to/firman/xxx.php start --env=prod # OR $ php /path/to/firman/xxx.php start --eprod $ $ ps auxf | grep Firman
自行操作
- 最简单的配置
include '/path/to/vendor/autoload.php'; (new \Firman\Server('tcp://0.0.0.0:8080'))->run();
- 完整配置
inlcude '/path/to/vendor/autoload.php'; $server = new \Firman\Server(); $socket = 'tcp://0.0.0.0:8080'; $server // Parameter. // optional, default is 1 // Set child process number ->setCount(1) // optional, can also be in constructor // Set socket ->setSocket($socket) // optional, default is Firman // Set process title ->setProcessTitle('Firman') // optional, default is /tmp // Set the path of file saved ppid ->setPpidPath('/tmp') // optional, default is 100 // Set socket backlog number ->setBacklog(100) // optional, default is 200 // Set select system call timeout value ->setSelectTimeout(5) // optional, default is 60 // Set accept timeout value ->setAcceptTimeout(10) // Event callback. // optional, when client connected with server, callback trigger. // Set connection event callback task ->onConnection(function($connection) { echo "New client connected." . PHP_EOL; }) // optional, when client send message to server, callback trigger. // Set message event callback task ->onMessage(function($connection) { // implement your logic }) // Run server. ->run();
服务器工作流程说明
- 检查环境。
- 解析命令。
- 初始化主进程信息。
- 派生子进程,安装子信号,对子进程轮询。
- 创建套接字服务器(如:创建套接字、绑定、监听、设置选项)。
- 在主进程上阻塞,监视任何子进程,重启已退出的子进程。
测试
$ ./vendor/bin/phpunit --bootstrap=vendor/autoload.php tests
待办事项
我们的定位是关注套接字
- 实现内置协议解析。
- 支持Unix域、UDP等。
- 健壮性。
资源
Composer文档:https://getcomposer.org/doc/
Symfony控制台组件:https://symfony.com.cn/doc/current/components/console.html
贡献
欢迎任何改进phvia/firman
的pull请求。
遵循PSR2编码风格:https://www.php-fig.org/psr/psr-2/
使用PHP_CodeSniffer工具:https://github.com/squizlabs/PHP_CodeSniffer
运行检查:php phpcs.phar --standard=psr2 ./
推荐编码标准:https://symfony.com.cn/doc/current/contributing/code/standards.html
组
QQ群:377154148