资讯专栏INFORMATION COLUMN

swoolefy-基于swoole扩展实现的高性能的常驻内存型API和Web应用服务框架

lewinlee / 1496人阅读

摘要:是一个基于扩展实现的轻量级高性能的常驻内存型的和应用服务框架高度封装了,,服务器,以及基于实现可扩展的服务,同时支持包方式安装部署项目。基于实用,抽象事件处理类,实现与底层的回调的解耦,支持同步异步调用,内置等常用组件等。

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即可,具体安装过程参考官方文档

docker容器已经配置好的php环境(开发测试)

为了方便开发和测试,我打包了一个基于alpine基础镜像搭建的php7.1环境容器bingcool/php2swoole:2.4,这个image已经非常小了,已经安装所有的必须扩展,其中swoole是1.10.4版本,可以通过php --ri swoole 查看信息。
alpine的官网:https://pkgs.alpinelinux.org/...

</>复制代码

  1. docker pull bingcool/php2swoole:2.4

已安装的扩展如下:

</>复制代码

  1. bz2
  2. Core
  3. curl
  4. date
  5. fileinfo
  6. filter
  7. ftp
  8. gd
  9. hash
  10. imagick
  11. inotify
  12. json
  13. libxml
  14. mbstring
  15. mcrypt
  16. memcached
  17. mongodb
  18. mysqlnd
  19. openssl
  20. pcntl
  21. pcre
  22. PDO
  23. pdo_mysql
  24. posix
  25. readline
  26. redis
  27. Reflection
  28. session
  29. SimpleXML
  30. soap
  31. sockets
  32. SPL
  33. standard
  34. swoole
  35. swoole_serialize
  36. xml
  37. xmlrpc
  38. Zend OPcache
  39. zip
  40. zlib
  41. [Zend Modules]
  42. Zend OPcache
开发部署

1、如果是自己安装的php环境(需在linux环境下),最好先创建一个不能登录伪用户www,用来执行worker进程业务代码

</>复制代码

  1. useradd www -d /home/www -s /sbin/nologin

则在某一个web目录,例如/home/www下

参考文档

2、使用bingcool/php2swoole容器启动php开发环境
下面是简单使用,首先是启动容器

</>复制代码

  1. 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)然后进入容器

</>复制代码

  1. docker exec -it dev /bin/sh

容器中已经安装好composer和git等工具,然后利用composer方式来安装部署一个项目,同样参考
参考开发文档

监控程序

1、启动文件自动监控程序,进入项目目录

</>复制代码

  1. 当前终端启动:php start.php start monitor
  2. 守护进程启动:php start.php start monitor -d
  3. 停止:php start.php stop monitor

可以在配置文件swoolefy/protocol/monitor/config.php设置。监控程序自动监控php的文件变动,然后swoole的worker自动重启,这个文件其实是通过调用代码Shell文件夹的swoole_monitor.sh来监控9502端口(这个是swoole的http服务的默认端口),根据端口监听,可以设置不同端口,监听不同协议服务。
需要注意的是,由于在容器中/home/www的目录是挂载与缩主机的,inotify是无法监听到文件变动的,所以这个监控程序在容器环境中是无效的,每次修改代码必须重启

http服务

2、启动swoole的http服务,进入进入项目目录

</>复制代码

  1. 启动:php swoolefy start http
  2. 守护进程启动:php swoolefy start http -d
  3. 停止:php swoolefy stop http

默认端口是9502,可以在配置文件protocol/http/config.php中更改,同时对应的protocol/monitor/config.php中对应更改端口,实现不同的自动重载。
注意文件权限问题

websocket服务

1、启动swoole的websocket服务,进入swoolefy

</>复制代码

  1. 启动:php swoolefy start websocket
  2. 守护进程启动:php swoolefy start websocket -d
  3. 停止:php swoolefy stop websocket

默认端口9503,可以在配置文件protocol/websocket/config.php中更改

rpc服务

1、启动swoole的rpc服务,进入进入项目目录

</>复制代码

  1. 启动:php swoolefy start rpc
  2. 守护进程启动:php swoolefy start rpc -d
  3. 停止:php swoolefy stop rpc

默认端口9504,可以在配置文件protocol/rpc/config.php中更改。

udp服务

1、启动swoole的rpc服务,进入进入项目目录

</>复制代码

  1. 启动:php swoolefy start udp
  2. 守护进程启动:php swoolefy start udp -d
  3. 停止:php swoolefy stop udp

默认端口9505,可以在配置文件protocol/udp/config.php中更改。

访问Index

在App/Controller中就可以编码测试,基本和thinkphp的mvc那样操作。
比如在App/Controller/IndexController.php

</>复制代码

  1. response->end("hello word!");
  2. }
  3. }

那么直接在浏览器输入http://ip:9502/Index/index
若需要渲染模板

</>复制代码

  1. assign("name","hello word!");
  2. $this->display("index.html");
  3. }

对应的路由规则:

</>复制代码

  1. controller/action

如果存在module模块:

</>复制代码

  1. module/controller/action

具体的可以参考App/Controller/的demo

如果需要使用mysql,redis,mongodb这些组件功能,请安装对应的扩展和服务,并在App/Config/config.php中配置。这个与Yii2的Component相似.

nginx代理

为了使用更好支持的HTTP协议,建议前端使用nginx作为代理,更多功能可以看proxy模块来设置

</>复制代码

  1. location / {
  2. proxy_http_version 1.1;
  3. proxy_set_header Connection "keep-alive";
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_pass http://127.0.0.1:9502;
  6. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28119.html

相关文章

  • 基于swooleswoolefy实现类似gowaitGroup多并发协程调度

    摘要:基于实用,抽象事件处理类,实现与底层的回调的解耦,支持协程调度,同步异步调用,全局事件注册,心跳检查,异步任务,多进程池等,内置等常用组件等。 swoolefy是一个基于swoole实现的轻量级高性能的常驻内存型的API和Web应用服务框架, 高度封装了http,websocket,udp服务器,以及基于tcp实现可扩展的rpc服务, 同时支持composer包方式安装部署项目。基于实...

    ZweiZhao 评论0 收藏0
  • Easyswoole 源码学习个人解析 目录

    摘要:易用稳定,本次想通过对的学习和个人解析,吸收框架的思想和设计知识,加强自己对的认知和理解。当然,笔者能力水平有限,后续的文章如有错误,还请指出和谅解。目录如下后续添加文章都会记录在此服务启动过程以及主体设计流程源码解析 前言 swoole是什么?官网的原话介绍是这样的: Swoole 使用纯 C 语言编写,提供了 PHP 语言的异步多线程服务器,异步 TCP/UDP 网络客户端,异步 ...

    CoXie 评论0 收藏0
  • MixPHP:基于 Swoole 常驻内存 PHP 框架

    摘要:框架最新源代码行数行,因此可以很容易的改造它,成为你们公司的专属框架。也不同于其他基于的微服务框架,只聚焦于微服务治理,定位于开发的更多领域,覆盖从初创到亿元级体量的技术诉求。的授权全靠用户自愿购买,详情 MixPHP是什么 MixPHP 是秉承 普及 PHP 常驻内存型解决方案,促进 PHP 往更后端发展 的理念而创造,采用 Swoole 扩展作为底层引擎,围绕常驻内存的方式而设计,...

    王晗 评论0 收藏0
  • 后端语言选浅谈

    摘要:再往后来,也就是这种以事件循环常驻内存为特点的后端平台,姑且能算是第四代后端平台。 前不久回答了一个关于后端语言选型的问题,写的回答也让笔者有了很多感触,因此在这里谈论下自己对后端语言选型的心得体会,姑且算是抛砖引玉,希望大家能分享各自的心得。 后端语言发展历史 Web 后端语言的兴起是从静态网页向动态网页的发展所产生的,最早的动态页面技术就是 CGI 技术,将客户端的输入交给 CGI...

    xcc3641 评论0 收藏0
  • 后端语言选浅谈

    摘要:再往后来,也就是这种以事件循环常驻内存为特点的后端平台,姑且能算是第四代后端平台。 前不久回答了一个关于后端语言选型的问题,写的回答也让笔者有了很多感触,因此在这里谈论下自己对后端语言选型的心得体会,姑且算是抛砖引玉,希望大家能分享各自的心得。 后端语言发展历史 Web 后端语言的兴起是从静态网页向动态网页的发展所产生的,最早的动态页面技术就是 CGI 技术,将客户端的输入交给 CGI...

    alighters 评论0 收藏0

发表评论

0条评论

lewinlee

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<