1…国内比较有名的一套电商系统 二次开发相关手册 https://doc.crmeb.com/mer/merchant/9198
代码是使用thinkphp6.0为主体开发。
PHP的运行版本要求 7.1-7.4 (相关插件和运行环境的支持)
swoole 4 (使用的是swoole自建HTTP服务器,运行的模式 同时系统封闭掉了正常public/index.php的代码入口)
需要搭建一个反向代理的nginx。也就是我们运行HTTP服务器的时候,并不是访问服务器 本身,而是会转发到swoole搭建的服务器。
这里需要理解普通的nginx服务器 和swoole服务器的区别
Swoole可以在进程间共享内存,减少了进程间通信的开销,降低延迟,提高了吞吐量。此外,Swoole采用的是异步IO模型,可以在一个线程内同时处理多个请求,而Nginx则是多进程的并发模式。因此,在大规模的高并发请求下,Swoole的性能更胜一筹
Nginx适合处理静态文件或者CGI请求,而Swoole则适合处理WebSocket等长连接请求。如果你的应用需要频繁地访问文件或者进行数据库操作,使用Nginx作为Web服务器更为合适;如果你需要实时通讯或者需要一个高并发的Web应用服务器,使用Swoole可能更适合
电商经常面临的一个问题是高并发,所以swoole架构更合适一些
swoole服务的启动 默认端口8324(可以自行更改,主要就是监听的服务器端口) 使用thinkphp
php think swoole start
这个是tp6手册里面内置的swoole 服务器的搭建启用
注意我们开发的时候,需要将config\swoole.php的配置进行热变更,每次开发改动都重新加载,正式环境下关掉热更新
hot_update 将该数组里面的更新 ‘enable’ => env(‘APP_DEBUG’, true), 这样就完成了普通的上传代码 就会导致重新加载
这是swoole服务器和普通服务器最大的区别 。
thinkphp6.0内置了swoole服务器,从而大幅度提升普通nginx的并发能力,包括支持了socket的通讯支持。
部署服务器的时候,需要配置相应的转发规则。
4.守护进程 需要添加俩个对应的守护进程 一个是定时任务的监听,一个是web服务器的监听,都很重要
php think swoole restart
php think queue:listen --tries=2
这样系统就完成了基础的部署,下一步安装就完成逻辑。
5.二次开发基础逻辑 设计一个API的逻辑流程
掌握API结构: (前后端开发是分离的)
/api/version (swoole会自动将路由分发出去)该API需要在对应的路由上进行配置route/api.php 同时根据该路由定位到
Route::get(‘version’, ‘admin.Common/version’); 可以看到对应的是admin/common.php文件里面的version
同样导航里面的某个分支: api/store/product/one/lst?page=1&limit=10
定位到 route/api.php 可以看到该路由Route::get(‘one/lst’, ‘StoreProductOne/lst’);
app\controller\api\store\product\StoreProductOne.php
基本上定位到逻辑点,就可以开始对代码进行二次开发。
6.代码的加密部分 (商业部分授权的源码 但是没有全开源)
cr.jingyuntg.com\crmeb\basic 该基础目录下的源码都被加密 大致推测 是授权验证/远程请求/核心函数之类的
当前加密代码的运行思路 授权域名搭建 超过域名之后,系统无法运行 如果直接写一套开源的 成本远远超过购买
但是又需要能进行二次开发(因为运营的需求千差万别)
6.用户端的调试 使用uniapp开发 \view\uniapp 前端H5的网页源码 开发改动
装载进入HB里面后, view/uni-app/config/app.js 里面配置服务器的访问域名(由于需要socket通讯,后台部署必须是https的访问证书)
其中默认socket的通讯端口是3000 然后编译运行即可正常看到前端H5网页的效果。
开发完成后,编译打包
7.主要访问:
/admin/login 管理员后台
/merchant/login 商家后台
/kefu/login 客服后台
全栈开发不适合同时打开前端和又打开后台 同时开发(内存压力急剧增大,容易导致电脑响应缓慢)
由于前后端是分离的,所以后端开发API对接即可。
8.加密规则: (默认拿到的用户名密码用的是)
if (!password_verify( p w d = ( s t r i n g ) pwd = (string) pwd=(string)this->request->param(‘password’), $user[‘pwd’])) t h i s − > l o g i n F a i l u r e ( this->loginFailure( this−>loginFailure(account);
注意这里 password_hash 和 password_verify 是php官方推荐的加密 匹配
建议取消传统的 md5(md5(password)*salt)的加密算法(不安全 不会升级 还有时间运算漏洞)