封装了http、websocket、udpserver、基于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、rpc基于tcp,开放系统接口,可定制协议数据格式4,将抽象Event的事件处理与底层事件监听解耦,屏蔽不同协议之间的应用差异,大部分代码共享5.实现超级全局变量、IOC、静态延迟绑定、组件服务常驻内存、trait复用、hook事件、单例、工厂模式等6.简单易用的异步任务管理TaskManager、定时器管理TickManager、内存表管理TableManager、进程管理ProcessManager、异常管理、超全局管理7、灵活的多层配置、配置参数可以实现封装的底层复杂功能8、应用对象的深拷贝,实现对象常驻内存,每次请求只需要从内存中拷贝应用对象,不需要重新创建,减少IO消耗9.封装View、Log、Mysql、Redis、Mongodb、Swiftmail、Session等常用组件根据业务,可以按照协议封装成组件。10、实现异步半阻塞和全异步非阻塞。EventHander与底层解耦。高度封装的行式启停控制脚本,简单命令即可管理整个框架项目地址:https://github.com/bingcool/s...,欢迎发布完善的文档和手册压力测试环境:1核2Gmemory虚拟机,没有任何调优,100个并发,100000个请求,压测输出helloworldab-c100-n100000http://127.0.0.1:81/Index/index压测可以达到2600qps应用场景一,swoolefy它推荐用于单个或多个服务,如异步邮件分发中心、搜索中心、日志上报中心、聊天系统、实时数据上报中心。例如用于实现基于solr的商品搜索中心、交易系统的实时下单、店庆期间的销售数据看板。2.对于复杂的业务场景,不建议使用swoolefy。传统的php-fpm是最好的选择。当然,split服务解耦后,部分服务可以使用swoolefy来实现。配置环境,安装实际环境(推荐)1.支持php7.0+2.搭建lnmp环境,推荐使用lnmp一键安装包,https://lnmp.org,推荐到安装lnmp1.43.安装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,具体安装过程参考官方文档docker容器已经配置了php环境(开发测试),为了方便开发测试,我打包了一个php7.1环境容器bingcool/php2swoole:2.4基于on高山基础图像。这个镜像已经很小了,所有需要的组件都安装好了Extension,这里的swoole是1.10.4版本,可以通过php--riswoole查看信息。Alpine官网:https://pkgs.alpinelinux.org/...dockerpullbingcool/php2swoole:2.4安装的扩展如下:bz2CorecurldatefileinfofilterftpgdhashimagickinotifyjsonlibxmlmbstringmcryptmemcachedmongodbmysqlndopensslpcntlpcrePDOpdo_mysqlposixreadlineredisReflectionsessionSimpleXMLsoapsocketsSPLstandardswooleswoole_serializexmlxmlrpcZendOPcachezipzlib【ZendModules】ZendOPcache开发部署无法登录的伪用户www用于执行worker进程业务代码useraddwww-d/home/www-s/sbin/nologin在某个web目录下,比如/home/www参考文档2、使用bingcool/php2swoole容器启动php开发环境下面是简单的使用,首先是启动容器dockerrun-it-d--namedev-p9502:9502-v/home/www/:/home/www/bingcool/php2swoole:2.4-v/home/www/:/home/www/就是把shrinkhost的/home/www目录挂载到容器的/home/www(1)然后进入容器dockerexec-itdev/bin/sh容器已经安装了composer和git等工具,然后使用composer安装部署一个项目,也参考参考开发文档监控程序1.启动文件自动监控程序,进入项目目录,启动当前终端:phpstart.phpstartmonitordaemonprocessstart:phpstart.phpstartmonitor-dstop:phpstart.phpstopmonitor可以在配置文件swoolefy/protocol/monitor/config.php中设置监控程序自动监控php的文件变化,然后swoole的worker自动重启。这个文件实际上是通过调用代码Shell文件夹下的swoole_monitor.sh来监听9502端口(这是swoole的http服务的默认端口),根据监听的端口可以设置不同的端口来监听不同的协议服务。需要注意的是,由于容器中的/home/www目录是在宿主机上挂载缩容的,inotify无法监控文件变化,所以这个监控程序在容器环境下是无效的,每次修改代码都要重启http服务2、启动swoole的http服务,进入项目目录。启动:phpswoolefystarthttp守护进程启动:phpswoolefystarthttp-d停止:phpswoolefystophttp默认端口为9502,可以在配置文件protocol/http/config.php中配置,相应的更改端口相应的protocol/monitor/config.php实现不同的自动重载。websocket服务注意文件权限问题1.启动swoole的websocket服务,输入swoolefystart:phpswoolefystartwebsocketdaemonstart:phpswoolefystartwebsocket-dstop:phpswoolefystopwebsocket默认端口9503,可以在配置文件中配置protocol/websocket/在config.php中更改rpc服务1.启动swoole的rpc服务,进入项目目录。启动:phpswoolefystartrpcDaemonprocess启动:phpswoolefystartrpc-d停止:phpswoolefystoprpc默认端口为9504,可以在配置文件protocol/rpc/config.php中修改配置。udp服务1、启动swoole的rpc服务,进入项目目录。启动:phpswoolefystartudp守护进程启动:phpswoolefystartudp-d停止:phpswoolefystopudp默认端口为9505,可以在配置文件protocol/udp/config中配置。改变php.AccessIndex可以在App/Controller中进行编码和测试,与thinkphp的mvc基本相同。例如在App/Controller/IndexController.phpresponse->结束('你好词!');}}然后直接在浏览器输入http://ip:9502/Index/index如果需要渲染模板assign('name','helloword!');$this->display('index.html');}对应routeRule:controller/action如果有模块module:module/controller/action具体可以参考App/Controller/的demo如果需要使用mysql、redis、mongodb等组件功能,请安装相应的扩展和服务,并在App/Config/config.php中配置。这类似于Yii2的Component。为了使用更好支持的HTTP协议,nginx代理推荐在前端使用nginx作为代理。更多功能请参考proxy模块设置location/{proxy_http_version1.1;proxy_set_header连接“保持活动状态”;proxy_set_headerX-Real-IP$remote_addr;proxy_passhttp://127.0.0.1:9502;}
