由于workerman底层直接读取$_SERVER['argv']的命令行参数,没有提供独立的方法start/stop,而tp的命令行参数无法适配workerman,虽然thinkphp官方专门做了一个适配的版本,但是看了下评论问题挺多的。于是自己来搞一个.
(1).在application/command.php中添加如下代码:
return [ 'app\socket\command\Socket' ];
(2).创建 application/socket/command目录,在这个目录创建Socket.php文件
<?php
namespace app\socket\command;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use Workerman\Worker;
class Socket extends Command
{
/**
* 命令Input配置
*/
protected function configure()
{
$this->setName('socket')
->addArgument('action', Argument::OPTIONAL, "action")
->addOption('other', '-d', Option::VALUE_OPTIONAL, 'test');
}
/**
* 重置Cli参数
*/
protected function resetCli()
{
global $argv, $argc;
$file = "{$argv['0']} {$argv['1']}";
$action = $argv['2'];
$extend = empty($argv['3']) ? '' : $argv['3'];
$argv = [];
$argv[] = $file;
$argv[] = $action;
if ($extend)
{
$argv[] = $extend;
}
$argc = count($argv);
$_SERVER['argv'] = $argv;
$_SERVER['argc'] = $argc;
}
/**
* 命令响应
* @param Input $input
* @param Output $output
* @return int|void|null
*/
protected function execute(Input $input, Output $output)
{
//01.重置Cli命令行参数
$this->resetCli();
//02.开始WorkMan代码
$ws_worker = new Worker(config('socket.socket_name'));
// 启动4个进程对外提供服务
$ws_worker->count = 2;
// 接收到浏览器发送的数据时回复hello world给浏览器
$ws_worker->onMessage = function ($connection, $data) {
// 向浏览器发送hello world
$connection->send('hello ' . $data);
};
// 运行worker
Worker::runAll();
}
}(3).在tp根目录执行命令
php think socket start
名字不想叫socket,可以修改$this->setName('socket')
/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @param Decimal $lati...
if($_SERVER['REQUEST_METHOD'] == 'POST') { echo('This is post '); } elseif ($_SERVER['...
md5/sha1+salt方式是目前各大cms常用的加密方式,虽然salt安全,但是各大md5网站也在研究这个方向,那么我们应该选择password_hash动态hash来助力,一种密码有多种hash结果.看代码模拟登陆.<?php //01.注册 $user ='zhang...
重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/** * 获取应用根目录 * @return string */ public static function getRootP...
<?php /** * daemonize让当前脚本为守护进程执行 * @param string $callback 匿名函数 */ function daemonize($callback) {...
今天帮朋友查询wordpress执行超级慢的原因,特此记录开启fpm的慢日志,记录执行超过30秒的脚本request_slowlog_timeout = 30 slowlog = var/log/slow.log查看日志[23-May-2019 17...