由于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')
通常我们使用unset()删除数组的元素,数据的顺序并没有重置,使用array_merge()方法即可解决<?php $shoplist= array('a','b','c','d','e','...
项目需要使用websocket推送最新订单,客户服务器非linux不支持swoole,因此使用原生,直接上代码(1).PHP服务端<?php ini_set('error_reporting', E_ALL ^ E_NOTICE); ini_set...
在PHP中,大部分变量类型,如字符串,整型,浮点,数组等都是值类型的,而类和对象是引用类型.和其他语言有点差距.(1).在值类型中我们直接使用&符号表示指向对应变量的内存地址,当前变量和被指向的变量只要有1个的值被修改都会直接影响另外一个变量的值发生变化。(ps:还是非常节省内存的,可以使用...
首先看看以下代码:代码1:<?php $a=0.1; $b=0.7; if($a+$b==0.8) { echo "1"; } else{ echo "2"; } ?>代码2:<?php &n...
PHP不像net支持多继承,自身只支持单继承,为了解决这个问题,php出了Trait这个特性,减少单继承语言的限制。并且能让代码复用率更高。说白了就是一个对象的属性和方法扩展工具一样。例如:trait exts { public f...
重构框架的时候想要考虑支持下cli模式,于是参考了thinkphp的底层。/** * 获取应用根目录 * @return string */ public static function getRootP...