phvia/firman

PHP多进程和非阻塞I/O库。

dev-master / 0.0.x-dev 2018-10-10 04:31 UTC

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

许可证

MIT