独立开发者系列(44)——PHP的CLI运行模式

所有的编程语言,最开始,测试执行的方式,都是写好xx.xx后缀是各种语言标记,然后使用解释器直接执行,就可以看到hello world。这种执行模式被称之为CLI模式,无需依赖服务器,可以直接跑,效率比较高。本节主要汇总下CLI执行的使用场景,还有tp里面的一些使用方式。

1.命令行来生成CURD 由于命令行涉及到对底层文件和文件夹的增删,所以一般不允许正式环境里面直接操作的权限。比如fastadmin的curd命令。php think crud -t test 生成test数据表的CURD,web权限过大,容易诱发安全问题,所以命令行操作相对比较安全。

通过解析该命令,php是解析器(这里的php是可以任意版本的解释器,所以不同版本的php切换主要是根据该解析器)
thinp 是console的入口文件

// 定义项目路径
define('APP_PATH', __DIR__ . '/application/');
// 加载框架引导文件
require __DIR__ . '/thinkphp/console.php';

可以看到执行该文件,会去加载核心库的console.php 函数来执行逻辑。
除了权限,使用web开发类似CURD的整体逻辑也差不多,主要是读取数据表的结构,然后将表字段封装成变量,然后再读取模板,将变量写入到模板里面,然后写入设定格式的文件名里面

注意点:
PHP是允许外部输入参数的 print_r( a r g v ) ; 通过 argv); 通过 argv);通过argv 数组,可以看到执行php XX arg1 arg2 arg3 arg4 然后在代码逻辑里面解析对应参数的作用,就实现了CLI模式执行。

2.通过php搭建自己的web服务器
在一些高并发场景需求场景里面,需要使用swoole+php的搭建内置服务器 (thinkphp6官方直接支持swoole)
composer require topthink/think-swoole (需要安装swoole扩展)

php think swoole restart

安装好了之后,直接启动swoole服务器。swoole服务器的优势前面已经有说明 。如果是在宝塔里面,最好安装一个进程守护管理器(可以一直监控该进程,确保该服务器是在运行的)如果失败了会自动重启

swoole的运行模式:
php think swoole restart 然后守护该进程 。

使用swoole 做服务器需要注意的点:
由于swoole默认情况下是常驻内存的,也就是代码的开发改动调试是需要重新启动加载一次代码的,也就是加载一次后,代码就在内存中,直到服务器结束运行,所以给调试带来很大的不方便,需要将代码配置成 热更新模式(这样就跟普通的php代码差不多)
需要配置的话:
config/swoole.php 到该文件里面进行配置 (如果是需要启动俩套代码,需要这样配置) 该配置可以更改swoole启动服务器的端口,启动后,默认是服务器的IP端访问,需要转发到主服务器的80端口,同时配置https相关证书。网站的访问流程变成了: 访问我们静态网址(转发)——swoole搭建的服务器——内容转发过去——完成网站的访问

3.php使用 定时任务(循环检测)(也可以是队列任务 ,队列任务是一个一个循环取数据运行)
一个php监控一直在后端运行,如果检测到需要运行的任务 就直接执行php订单的脚本任务
php think queue:listen --tries
主要使用队列来装载一些 推送消息,定时统计 之类的任务,考虑到一次性用户量比较大,如果直接执行 必然会阻塞,所以需要用队列的模式,进行一个一个的执行。
补充点异步队列的Redis实现:

异步队列通常基于 Redis 的列表(list)数据结构来实现。可以将任务以特定的格式存储在列表中,作为队列的元素。
例如,可以使用LPUSH命令将任务添加到队列的左端,使用RPOP命令从队列的右端取出任务进行处理。

4.通过命令行搭建IM实时通讯
通讯一般是需要使用 swoole 或者workman 打开进程守护 用来应对远程客户端的socket请求链接
socket的请求是http协议的升级,避免了http协议频繁三次握手带来的性能损耗,协议头是ws 如果是https 则协议头是wss

php think fastim start -d
这样服务器就挂起了默认的swoole 配置。客户端就可以通过ws或者wss协议访问我们CLI执行的chat聊天室。

swoole服务聊天室的主要流程:(PHP里面)

执行swoole的初始化(包括命令配置处理 swoole检查 执行的相关参数)
调用swoole的类 $server = new WebSocketServer();
socket 服务主要动 安装了

use Swoole\WebSocket\Server as WebSocketServer; //安装了swoole之后,是可以直接使用该类,类似redis/其他扩展一样

$this->swoole = new WebSocketServer(‘0.0.0.0’, $this->config[‘websocket_port’], $this->mode, $this->sockType);
调用该初始化类,就建立了一个swoole服务器,其他的都是外围检查逻辑
底层逻辑和搭建服务器一样,也是通过swoole ,但是注意搭建的端口不需要转发,直接通过WS端口进行长链接操作。

你可能感兴趣的:(转型独立开发者,php,android,android,studio)