- Notifications
You must be signed in to change notification settings - Fork1
PHP Multi-process and Non-blocking I/O Socket Library.
License
NotificationsYou must be signed in to change notification settings
phvia/firman
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
PHP multi-process and non-blocking I/O library.
- PHP>=7. (for new features and high performance)
- PCNTL extension. (compile PHP with
--enable-pcntl
option to enable) - Sockets extension. (compile PHP with
--enable-sockets
option to enable)
$ composer require phvia/firman:dev-master
- Show usage
$ php /path/to/firman/examples/via_websocket_serv_builtin.phpFirman package 0.0.1Usage:command [options] [arguments]Options: -h, --help Display thishelp 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: 1for normal output, 2for more verbose output and 3for debugAvailable commands:help Displayshelpfor acommand list Lists commands restart Restart Firman server start Start Firman server stop Stop Firman server
- Show usage detail
$ php /path/to/firman/examples/via_websocket_serv_builtin.php start -hUsage: start [options]Options: -e, --env=ENV The Environment name (support: dev, prod) [default:"dev"] -h, --help Display thishelp 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: 1for normal output, 2for more verbose output and 3for debugHelp: Start Firman server
- Process control
# 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
- Run in daemon
$ php /path/to/firman/xxx.php start --env=prod# OR$ php /path/to/firman/xxx.php start --eprod$$ ps auxf| grep Firman
- Simplest configure
include'/path/to/vendor/autoload.php';(new \Firman\Server('tcp://0.0.0.0:8080'))->run();
- Full configure
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();
- Check environment.
- Parse command.
- Initialize master process information.
- Fork child process, install signal for child, poll on child.
- Create socket server (like: create socket, bind, listen, set option).
- Block on master, monitor any child process and restart who exited.
$ ./vendor/bin/phpunit --bootstrap=vendor/autoload.php tests
Our position is focus on socket :
- Implement protocol parse built-in.
- Support Unix domain, UDP, ect.
- Robustness.
Composer Document:https://getcomposer.org/doc/
Symfony Console Component:http://symfony.com/doc/current/components/console.html
Any pull requests to improvephvia/firman are welcome.
Coding style follow PSR2:https://www.php-fig.org/psr/psr-2/
Using PHP_CodeSniffer tool:https://github.com/squizlabs/PHP_CodeSniffer
Running check:php phpcs.phar --standard=psr2 ./
Recommend Coding Standards:https://symfony.com/doc/current/contributing/code/standards.html
QQ group: 377154148