workerman 代码调整
下载workerman, 放入thinkphp,注意与Home平级,就把workerman当做是一个模块。
修改worker类中的parseCommand()方法
global $argv;
// Check argv;
$start_file = $argv[0];
$available_commands = array(
'start',
'stop',
'restart',
'reload',
'status',
'connections',
);
$usage = "Usage: php yourfile.php {" . implode('|', $available_commands) . "} [-d]\n";
if (!isset($argv[1]) || !in_array($argv[1], $available_commands)) {
exit($usage);
}
// Get command.
$command = trim($argv[1]);
$command2 = isset($argv[2]) ? $argv[2] : '';
将上面的代码替换成如下:
global $argv;
// Check argv;
$start_file = $argv[0];
if (!isset($argv[2])) {
exit("Usage: php yourfile.php Controller/Action {start|stop|restart|reload|status|kill}\n");
}
// Get command.
$command = trim($argv[2]);
$command2 = isset($argv[3]) ? $argv[3] : '';
thinkphp代码调整
正常建立Workerman控制器并在文件开始多引入一个命名空间,功能是用于引入Workerman类代码如下:
use Workerman\Worker;
通过文件引用将workerman加载到方法里面并编写workerman代码如下:
require_once '/home/wwwroot/default/Application/Workerman/Autoloader.php';
应用代码如下:
$worker = new Worker('http://0.0.0.0:2345');
$worker->onMessage = function($connection, $data){
static $request_count = 0;// 已经处理请求数
var_dump($data);
$connection->send("hello");
/*
* 退出当前进程,主进程会立刻重新启动一个全新进程补充上来,从而完成进程重启
*/
if(++$request_count >= MAX_REQUEST){// 如果请求数达到1000
Worker::stopAll();
}
};
Worker::runAll();
linux 运行thinkphp 方法中的workerman代码
linux命令运行的代码如下:
php index.php Home/Workerman/index start