Download the PHP package xiaosongshu/fasterphpweb without Composer
On this page you can find all versions of the php package xiaosongshu/fasterphpweb. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download xiaosongshu/fasterphpweb
More information about xiaosongshu/fasterphpweb
Files in xiaosongshu/fasterphpweb
Package fasterphpweb
Short Description 一个常驻内存 php框架,提供http,rtmp,websocket服务
License MIT
Informations about the package fasterphpweb
FASTERPHPWEB
一个使用socket编写的PHP常驻内存框架,本项目是想到哪里写到哪里,里面有记录了笔记。
框架简介
本框架旨在让用户了解和学习PHP实现web运行原理,涉及到了相对较多的底层基础知识。
fasterphpweb是一款常驻内存的轻量级的php框架,遵循常用的mvc架构。
本框架对timer,redis,mysql,rabbitmq,kafka,websocket,elasticsearch,nacos,sqlite 进行了简单封装,并且保留了部分代码实例。
本框架提供基本的http服务,可支持api接口或者web网页。
本框架提供基本的websocket服务,可支持长链接,适用于聊天等场景。
本框架提供rtmp流媒体服务,纯PHP开发,不需要其他依赖。支持rtmp推流,rtmp拉流和flv拉流。适用于直播场景。
本框架不对外提供服务了,仅作为作者个人学习项目,因为里面添加太多的笔记了。而且代码发生了很多变化,也添加很多第三方的插件,不能算纯原创了。
项目安装
启动项目
linux环境
windows环境
目录结构
|-- app
|-- controller <控制层>
|-- index <index业务模块>
|-- ... <其他业务模块>
|-- facade <门面模块>
|-- queue <队列任务模块>
|-- rabbitmq <rabbitmq队列>
|-- model <模型层>
|-- command <自定义命令行>
|-- config <配置项>
|--app.php <项目配置>
|--database.php <数据库配置>
|--redis.php <缓存配置>
|--server.php <http服务配置>
|--timer.php <定时任务配置>
|-- mysql <mysql文件,非必须>
...
|-- public <公共文件>
|-- root <系统目录,建议不要轻易改动>
...
|-- vendor <外部扩展包>
|-- view <视图层>
...
|-- composer.json <项目依赖>
|-- README.md <项目说明文件>
|-- start.php <服务启动文件>
|-- songshu <服务启动文件>
快速开始
1,导入mysql文件到你的数据库或者自己创建
2,进入项目根目录:cd /your_project_root_path
3,调试模式: php start.php start
4,守护进程模式: php start.php start -d
5,重启项目: php start.php restart
6,停止项目: php start.php stop
7,项目默认端口为:8000, 你可以自行修改
8,项目访问地址:localhost://127.0.0.1:8000
9,windows默认只开启一个http服务
10,windows若需要测试队列,请单独开启一个窗口执行 php start.php queue ,监听队列
11,windows不支持定时器
12,本项目支持普通的redis的list队列,同时支持rabbitmq队列,如果需要使用延时队列,需要安装插件
13,在windows上默认使用select的io多路复用模型,在linux上默认使用epoll的io多路复用模型
14,但是在linux系统上,如果使用开启后台运行,加入不支持epoll模型,则使用的多进程同步阻塞io模型。
15,系统环境搭建,默认需要php,mysql,redis,而rabbitmq不是必须的。你可以自己搭建所需要的环境,也可以 使用本项目下面的docker配置。
16,假设你使用docker配置,首先要安装docker,然后执行命令:docker-compose up -d 启动环境。注意修改 docker-compose.yaml 里面的目录映射,端口映射。
注意
1,原则上本项目只依赖socket,mysqli,redis扩展和pcntl系列函数,如需要第三方扩展,请自行安装。
2,因为是常驻内存,所以每一次修改了php代码后需要重启项目。
3,start.php为项目启动源码,root目录为运行源码,除非你已经完全明白代码意图,否则不要轻易修改代码。
4,所有的控制器方法都必须返回一个字符串,否则连接一直占用进程,超时后系统自动断开连接。
5,业务代码不要使用sleep,exit这两个方法。否则导致整个进程阻塞或者中断。
联系开发者
项目地址
https://github.com/2723659854/fasterphpweb
项目文档
项目基本配置
控制层
请求
获取get参数
获取post参数
获取所有请求参数
获取原始请求包体
获取header头部信息
获取原始querystring
获取cookie
响应
设置cookie
返回视图
返回数据
重定向
下载文件
设置响应头
设置响应状态码
模板渲染
默认支持html文件,变量使用花括号表示{},暂不支持for,foreach,if等复杂模板运算
模型层
默认使用mysql数据库
数据库配置
模型的定义
模型的使用
数据库事务的使用
提示:无论在使用何种框架操作事务的时候,尽量缩小事务的范围,数据库操作要和开启事务,提交紧紧的贴在一起,中间尽量不要有其他的 业务逻辑代码,避免锁表,避免多个事务交叉锁死。
缓存的使用
项目默认支持redis缓存
缓存的配置
缓存的使用
路由
配置文件
注解路由
中间件
创建中间件
中间件内容如下:
使用中间件
1,路由
2,注解
依赖自动注入
本框架提供依赖自动注入,不需要每一次都手动实例化依赖。使用关键字@Inject,系统根据关键字自动注入依赖,详见下面的方法。
这里使用了注解,系统自动注入依赖App\Service\HahaService,不需要手动注入(使用__construct()方法注入依赖)。
定时器
只能在linux系统中使用定时器,或者使用docker环境。
添加定时任务
redis 队列
redis连接配置
创建消费者
生成的消费者内容如下:
投递消息
rabbitmq消息队列
rabbitmq连接配置
创建消费者类
生成的消费者内容如下:
开启消费者任务
投递消息
若不满足需求,可以使用插件
elasticsearch 搜索
elasticsearch 支持的方法
若不满足需求,可以使用插件
一些例子:
你可能需要一键搭建elasticsearch服务,仅供参考:
elasticsearch属于内存数据库,启动服务后会占用很大的系统内存(redis和sqlite这两个和elasticsearch不是一个数量级),导致服务器卡顿,影响其他服务正常运行,所以将elasticsearch独立搭建服务。
正式生成环境建议单独部署一台服务器用于部署elasticsearch,如果需要多个节点,那就需要多部署几台服务器。
如果有特殊的分词需求,建议安装扩展ik分词器,参照Docker中的elasticsearch安装ik分词器
加入容器
解放双手,不需要每一次都去实例化需要调用的对象。使用容器简单方便。
G方法和M方法的区别是:
G方法只会实例化一次对象,然后存储在内存中,下一次调用直接从内存中获取。
而M方法每一次都是重新实例化一个新的对象。
自定义命令
创建
生成的自定义命令类如下:
sqlite数据库支持
创建模型
或者
模型内容如下
用法
nacos服务
安装客户端
nacos提供的方法
可以根据自己的需求,给项目添加配置检测,微服务管理。
配置检测:创建一个常驻内存进程,每隔30秒,读取一次nacos服务器上的配置,配置发生了变化,则修改配置,并重启服务。
微服务管理:创建一个常驻内存进程,进程启动的时候注册服务。
nacos配置管理
配置nacos服务器,以及开启配置管理
而项目从nacos服务读取的配置会保存到项目根目录/config.yaml文件。文件内容如下,仅作为实例:
你的项目其他的配置文件可以通过读取yaml配置, 例如config/database.php,文件内容如下:
当nacos上的配置发生变化后,会自动拉取最新的配置,并重启项目
你可以使用NacosConfigManager::sync()发布你的配置,该命令会把你的config.yaml的内容发布到nacos服务器上去。
你可能需要一键搭建nacos服务,仅供参考:
nacos这种负责管理配置和服务,安全性要求很高,一般不会销毁和重建,故没有将nacos服务绑定到基础容器里面。
ws服务(websocket)
创建ws服务
自动生成的ws服务类如下
开启服务 config/ws.php
为方便测试,可以仅开启某一个ws服务,
或者
需注意命名空间大小写。须严格匹配。
javaScript客户端测试代码
php版本的websocket客户端
以下是客户端使用示例。
首次使用需要初始化,调用setUp()设置服务端ip和port。
回调函数onMessage()方法负责处理用户的业务逻辑。
start()方法是阻塞函数,负责监听服务端消息。
send()函数负责发送消息,可以在任意地方调用。
get()方法负责读取一条消息,可以在任意地方调用。
流媒体服务rtmp
流媒体服务已经独立成为一个单独的项目了,地址是 https://github.com/2723659854/rtmp_server 。 你可以单独安装流媒体服务,命令如下:
流媒体服务配置 config/rtmp.php
开启流媒体服务
如果config/rtmp.php里面配置了'enable'=>true,在守护模式下rtmp会跟随项目一起启动。
直播推流地址:rtmp://127.0.0.1:1935/a/b
rtmp 拉流地址:rtmp://127.0.0.1:1935/a/b
http-flv播放地址: http://127.0.0.1:18080/a/b.flv
ws-flv播放地址: ws://127.0.0.1:18080/a/b.flv
推流工具 :obs,ffmpeg
拉流工具 :vlc播放器,web拉流
本框架提供web拉流,详见示例:http://localhost:8000/video/play
播放页面如下:
Http客户端
支持 http/https协议
使用方法如下
注意:在使用http异步请求客户端的时候 ,不要在成功回调和失败回调函数中抛出任何异常,如果需要抛出异常,一定要手动捕获。因为
在回调里面抛出异常,是没有其他服务来接管这个异常的,可能会导致进程摆烂。虽然本系统已经做了容错进行兜底,但是还是强烈建议,如果
一定要抛出异常,请自行捕获并处理异常。
若该http客户端不满足你的需求,你可以使用第三方http客户端,比如Guzzle。或者使用curl函数自己构建请求。
发送邮件
开启smtp服务 并获取授权码
登录到你的邮箱,设置开启smtp服务。一般在邮箱的设置,账户,smtp里面。
发送邮件
也可以修改自定义命令文件app/command/Email.php 文件的配置,测试发送邮件。
windows环境支持
如果需要在windows正式环境上线运行项目,执行php windows.php,如果需要关闭服务php windows.php stop即可。
命令行工具
创建自定义命令行: php start.php make:command Test
创建控制器: php start.php make:controller a/b/c
创建mysql模型: php start.php make:model index/user
创建sqlite模型: php start.php make:sqlite Demo
创建中间件: php start.php make:middleware Auth
创建redis消费者:php start.php make:queue Demo
创建rabbitmq消费者:php start.php make:rabbitmq DemoConsumer
项目打包:php -d phar.readonly=0 songshu make:phar
项目打包部署
为了方便部署服务,可以将整个项目打包上传到服务器,不再需要安装其它扩展,我们提供了一键 打包服务。项目将会被打包成phar格式文件,这个需要修改你的php.ini配置phar.readonly = Off, 当然了,如果觉得麻烦,那就直接在命令当中设置临时的phar.readonly = Off也是可以的。 打包命令:
打包后的项目,服务管理和原来一样的,只是将start.php或者songshu 换成了 songshu.phar 文件即可,在songshu.phar所在目录执行
编译二进制文件
仅支持linux运行环境
项目可以在任意平台打包编译,但是打包编译后的二进制文件仅支持linux环境,不兼容windows,mac。你也可以下载对应平台的PHP静态文件生成windows或者mac的可执行文件。
有可能你不想安装php环境,想直接运行项目,那么我们也提供了一键打包成二进制文件的方法,打包命令
打包完成后直接上传至服务器,进入到项目根目录,执行命令管理服务
项目打包成exe (windows)
本项目可以打包编译成安装包,方便分发给其他用户安装使用。需要使用到第三方的服务实现,这已经超过了本项目的范围,有兴趣的coder可以自行操作。
日志
系统默认只记录运行的错误日志,按日记录,存放位置在 runtime/log/Y-m-d.log。提供记录日志函数dump_error(Exception|RuntimeException $exception), 若不满足需求,可以自己编写一个日志记录类。
其他
1,现在的网站都已经发展到前后端分离了,默认是无状态请求,cookie几乎没有用了。
所以没有编写cookie和session操作类了。 你可以使用token来识别用户,而不是cookie或者session。
2, 如果你在项目的根目录创建了自定义的目录,那么建议你使用require_once 方法手动
加载这些文件,当然你也可以使用composer的自动加载配置,编辑项目根目录的composer.json 文件,编辑字段psr4规范,
里面添加你需要加载的目录的名称,当然了,你的自定义目录必须符合Psr4规范,编辑完成后保存composer.json文件。最后执行
composer dump-autoload -o 命令,让composer刷新文件和对象的映射关系。做完以上的操作过后,你就可以使用use引入
你需要使用的类了。
补充
这种,在name两边加上英文波浪线,就是中横线
name
算法
算法部分都放在math.php
文件里面,可以在根目录执行php math.php
命令运行算法。有兴趣的朋友可以看一下。
动画
php在cli模式下,使用纯php开发动画,动画名称为《雪飘人间》,你可以在项目根目录下执行命令php snow.php
。你可以按ctrl + c
关闭动画。
本项目下的动画有:
动画已经单独集成为插件了,安装命令如下:
下载地址: https://github.com/2723659854/animation
列 1 | 列 2 | 列 3 |
---|---|---|
内容 1 | 内容 2 | 内容 3 |
待办事项
1,支持多线程,在不使用swoole的情况下,使用多线程
2,支持在同一个进程内,可以将任务分解成多个子任务,每一个子任务独占一个线程,多个任务同时进行。
All versions of fasterphpweb with dependencies
php-amqplib/php-amqplib Version 3.2.*
elasticsearch/elasticsearch Version 7.17.*
xiaosongshu/colorword Version dev-master
xiaosongshu/progress Version dev-master
xiaosongshu/table Version dev-master
phpseclib/phpseclib Version *
jeremeamia/superclosure Version ^2.4@dev
nikic/fast-route Version ^2.0@dev
ext-pcntl Version *
ext-mbstring Version *
ext-posix Version *
ext-sockets Version *
ext-mysqli Version *
evenement/evenement Version ^3.0
apix/log Version ^1.2
react/promise Version ^2.9
xiaosongshu/nacos Version dev-master
symfony/yaml Version 5.4.*
psr/container Version ^1.1.1
php-di/php-di Version ^6
doctrine/annotations Version ^1.14
xiaosongshu/mail Version dev-master
ext-gd Version *
ext-memcache Version *
nikic/php-parser Version ^4.19
ext-zlib Version *
haozi-team/chatgpt-php Version ^2.1
ext-readline Version *
react/event-loop Version ^3@dev
nmred/kafka-php Version 0.2.*
monolog/monolog Version ^2.9