摘要:是一个基于扩展实现的轻量级高性能的常驻内存型的和应用服务框架高度封装了,,服务器,以及基于实现可扩展的服务,同时支持包方式安装部署项目。基于实用,抽象事件处理类,实现与底层的回调的解耦,支持同步异步调用,内置等常用组件等。
swoolefy
swoolefy是一个基于swoole扩展实现的轻量级高性能的常驻内存型的API和Web应用服务框架,高度封装了http,websocket,udp服务器,以及基于tcp实现可扩展的rpc服务,同时支持composer包方式安装部署项目。基于实用,swoolefy抽象Event事件处理类,实现与底层的回调的解耦,支持同步|异步调用,内置view、Log、session、mysql、redis、memcached、mongodb等常用组件等。
swoolefy是一个适合学习swoole的框架,特别适合中小团队,用过Tp的phper基本都会用,有过Yii2的经验者,那就更容易入手了。同时swoolefy底层屏蔽了swoole与传统php-fpm的一些差异,让大部分的phper使用起来可以像使用php-fpm那样,轻松入手。
实现的功能特性1、轻量级的框架,实现路由与调度,MVC三层,当然也可以配置多层
2、支持composer的PSR4规范和实现自定义注册命名空间
3、支持多协议,目前支持http,websocket,tcp,udp,以及基于tcp实现的rpc,开放式的系统接口,可自定义协议数据格式
4、抽象Event的事件处理与底层的事件监听解耦,屏蔽不同协议之间的应用差异,大部分代码实现共用
5、实现超全局变量,IOC,静态延迟绑定,组件服务常驻内存化,trait的多路复用,钩子事件,单例,工厂模式等
6、简单易用的异步任务管理TaskManager, 定时器管理TickManager, 内存表管理TableManager, 进程管理ProcessManager,异常管理,超全局管理
7、灵活多层的配置,配置参数即可实现底层已封装的复杂功能
8、应用对象的深度复制,实现对象的常驻内存,每个请求只需要从内存中复制应用对象,不需要再重新创建,减少IO消耗
9、封装View,Log,Mysql,Redis,Mongodb,Swiftmail,Session等常用组件,其他组件根据业务按照约定即可封装成组件
10、实现异步半阻塞与全异步非阻塞,EventHander与底层解耦
11、基于inotify实现自动监控swoole服务的文件变动,实现worker自动reload,智能邮件通知
12、命令行形式高度封装启动|停止控制的脚本,简单命令即可管理整个框架
项目地址:https://github.com/bingcool/s...,欢迎issue
完善的文档手册
压测环境:1核2G内存的虚拟机,没有任何调优,100并发,100000请求,压测输出hello world
ab -c 100 -n 100000 http://127.0.0.1:81/Index/index
压测可以达到2600qps
1、swoolefy建议用在单个或多个的服务中,例如异步邮件统发中心,搜索中心,日志上报中心,聊天系统,实时数据上报中心。比如用于实现了基于solr的产品搜索中心,店庆时交易系统实时订单以及销售数据看板
2、对于复杂的业务场景,不建议使用swoolefy,传统的php-fpm是最好的选择,当然,分拆服务解耦后,某些服务可以使用swoolefy来实现。
1、支持php7.0+
2、搭建lnmp环境,建议使用lnmp一健安装包,https://lnmp.org, 建议安装lnmp1.4
3、安装php必要的扩展,本框架需要的扩展包括swoole(1.9.17+), swoole_serialize(https://github.com/swoole/swo... inotify, pcntl, posix, zlib, mbstring,可以通过php-m查看是否安装了这些扩展,如果通过lnmp1.4一健安装包安装的,已经默认安装好这四个pcntl, posix, zlib, mbstring扩展的,只需要在安装swoole和swoole_serialize, inotify即可,具体安装过程参考官方文档
为了方便开发和测试,我打包了一个基于alpine基础镜像搭建的php7.1环境容器bingcool/php2swoole:2.4,这个image已经非常小了,已经安装所有的必须扩展,其中swoole是1.10.4版本,可以通过php --ri swoole 查看信息。
alpine的官网:https://pkgs.alpinelinux.org/...
docker pull bingcool/php2swoole:2.4
已安装的扩展如下:
bz2 Core curl date fileinfo filter ftp gd hash imagick inotify json libxml mbstring mcrypt memcached mongodb mysqlnd openssl pcntl pcre PDO pdo_mysql posix readline redis Reflection session SimpleXML soap sockets SPL standard swoole swoole_serialize xml xmlrpc Zend OPcache zip zlib [Zend Modules] Zend OPcache开发部署
1、如果是自己安装的php环境(需在linux环境下),最好先创建一个不能登录伪用户www,用来执行worker进程业务代码
useradd www -d /home/www -s /sbin/nologin
则在某一个web目录,例如/home/www下
参考文档
2、使用bingcool/php2swoole容器启动php开发环境
下面是简单使用,首先是启动容器
docker run -it -d --name dev -p 9502:9502 -v /home/www/:/home/www/ bingcool/php2swoole:2.4
-v /home/www/:/home/www/ 是将缩主机的/home/www目录挂载到容器的/home/www
(1)然后进入容器
docker exec -it dev /bin/sh
容器中已经安装好composer和git等工具,然后利用composer方式来安装部署一个项目,同样参考
参考开发文档
1、启动文件自动监控程序,进入项目目录
当前终端启动:php start.php start monitor 守护进程启动:php start.php start monitor -d 停止:php start.php stop monitor
可以在配置文件swoolefy/protocol/monitor/config.php设置。监控程序自动监控php的文件变动,然后swoole的worker自动重启,这个文件其实是通过调用代码Shell文件夹的swoole_monitor.sh来监控9502端口(这个是swoole的http服务的默认端口),根据端口监听,可以设置不同端口,监听不同协议服务。
需要注意的是,由于在容器中/home/www的目录是挂载与缩主机的,inotify是无法监听到文件变动的,所以这个监控程序在容器环境中是无效的,每次修改代码必须重启
2、启动swoole的http服务,进入进入项目目录
启动:php swoolefy start http 守护进程启动:php swoolefy start http -d 停止:php swoolefy stop http
默认端口是9502,可以在配置文件protocol/http/config.php中更改,同时对应的protocol/monitor/config.php中对应更改端口,实现不同的自动重载。
注意文件权限问题
1、启动swoole的websocket服务,进入swoolefy
启动:php swoolefy start websocket 守护进程启动:php swoolefy start websocket -d 停止:php swoolefy stop websocket
默认端口9503,可以在配置文件protocol/websocket/config.php中更改
rpc服务1、启动swoole的rpc服务,进入进入项目目录
启动:php swoolefy start rpc 守护进程启动:php swoolefy start rpc -d 停止:php swoolefy stop rpc
默认端口9504,可以在配置文件protocol/rpc/config.php中更改。
udp服务1、启动swoole的rpc服务,进入进入项目目录
启动:php swoolefy start udp 守护进程启动:php swoolefy start udp -d 停止:php swoolefy stop udp
默认端口9505,可以在配置文件protocol/udp/config.php中更改。
访问Index在App/Controller中就可以编码测试,基本和thinkphp的mvc那样操作。
比如在App/Controller/IndexController.php
response->end("hello word!"); } }
那么直接在浏览器输入http://ip:9502/Index/index
若需要渲染模板
assign("name","hello word!"); $this->display("index.html"); }
对应的路由规则:
controller/action
如果存在module模块:
module/controller/action
具体的可以参考App/Controller/的demo
如果需要使用mysql,redis,mongodb这些组件功能,请安装对应的扩展和服务,并在App/Config/config.php中配置。这个与Yii2的Component相似.
nginx代理为了使用更好支持的HTTP协议,建议前端使用nginx作为代理,更多功能可以看proxy模块来设置
location / { proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://127.0.0.1:9502; }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28119.html
摘要:基于实用,抽象事件处理类,实现与底层的回调的解耦,支持协程调度,同步异步调用,全局事件注册,心跳检查,异步任务,多进程池等,内置等常用组件等。 swoolefy是一个基于swoole实现的轻量级高性能的常驻内存型的API和Web应用服务框架, 高度封装了http,websocket,udp服务器,以及基于tcp实现可扩展的rpc服务, 同时支持composer包方式安装部署项目。基于实...
摘要:易用稳定,本次想通过对的学习和个人解析,吸收框架的思想和设计知识,加强自己对的认知和理解。当然,笔者能力水平有限,后续的文章如有错误,还请指出和谅解。目录如下后续添加文章都会记录在此服务启动过程以及主体设计流程源码解析 前言 swoole是什么?官网的原话介绍是这样的: Swoole 使用纯 C 语言编写,提供了 PHP 语言的异步多线程服务器,异步 TCP/UDP 网络客户端,异步 ...
摘要:框架最新源代码行数行,因此可以很容易的改造它,成为你们公司的专属框架。也不同于其他基于的微服务框架,只聚焦于微服务治理,定位于开发的更多领域,覆盖从初创到亿元级体量的技术诉求。的授权全靠用户自愿购买,详情 MixPHP是什么 MixPHP 是秉承 普及 PHP 常驻内存型解决方案,促进 PHP 往更后端发展 的理念而创造,采用 Swoole 扩展作为底层引擎,围绕常驻内存的方式而设计,...
阅读 2082·2023-04-26 02:41
阅读 2145·2021-09-24 09:47
阅读 1545·2019-08-30 15:53
阅读 1204·2019-08-30 13:01
阅读 1884·2019-08-29 11:27
阅读 2856·2019-08-28 17:55
阅读 1739·2019-08-26 14:00
阅读 3375·2019-08-26 10:18