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

devtools/2024/11/13 15:45:47/

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

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

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

php">// 定义项目路径
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端口进行长链接操作。


http://www.ppmy.cn/devtools/100768.html

相关文章

零基础5分钟上手亚马逊云科技-利用MQ为应用解耦

简介: 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

软件运维实施维保方案(Doc完整版原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件全套资料部分文档清单: 工作安排任务书,可行性分析报告,立项申请审批表,产…

大数据技术之Flume 企业开发案例——负载均衡和故障转移(6)

目录 负载均衡和故障转移 1)案例需求 2)需求分析 3)实现步骤 负载均衡和故障转移 1)案例需求 使用 Flume1 监控一个端口,其 sink 组中的 sink 分别对接 Flume2 和 Flume3,采用 FailoverSinkProcessor…

Linux--汇编语法配置初始化的原理

------改编自正点原子Linux开发手册 我们在学习 STM32 的时候几乎没有用到过汇编,可能在学习 UCOS 、 FreeRTOS 等 RTOS 类操作系统移植的时候可能会接触到一点汇编。但是我们在进行嵌入式 Linux 开发的时候是绝 对要掌握基本的 ARM 汇编,因为…

前端常见问题

一、<!DOCTYPE html>作用 <!DOCTYPE>是html文档的第一行&#xff0c;用于声明文档的类型&#xff0c;它会告诉浏览器要用哪一种HTML规范来渲染文档&#xff0c;确保正确渲染页面。 二、src与 href 的区别 &#xff08;一&#xff09;、请求资源类型的不同 在请…

4820道西医综合真题西医真题ACCESS\EXCEL数据库

本题库内容源自某出版物《西医综合真题考点还原与答案解析》&#xff0c;包含4千多道真题。这个数据库包含3个表&#xff0c;一个是分类表&#xff08;SECTION_BEAN&#xff09;&#xff0c;一个是题库主表&#xff08;QUESTION_INFO_BEAN&#xff09;&#xff0c;一个是选项表…

java一键生成数据库说明文档html格式

要验收项目了&#xff0c;要写数据库文档&#xff0c;一大堆表太费劲了&#xff0c;直接生成一个吧&#xff0c;本来想用个别人的轮子&#xff0c;网上看了几个&#xff0c;感觉效果不怎么好&#xff0c;自己动手写一个吧。抽空再把字典表补充进去就OK了 先看效果&#xff1a; …

【R语言实战】——多模型预测及评价

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…