{"id":13703834,"url":"https://github.com/pinguo/php-msf","last_synced_at":"2025-05-14T23:07:03.311Z","repository":{"id":57041723,"uuid":"102098400","full_name":"pinguo/php-msf","owner":"pinguo","description":"PHP微服务框架即Micro Service Framework For PHP","archived":false,"fork":false,"pushed_at":"2019-01-23T05:26:38.000Z","size":3450,"stargazers_count":1741,"open_issues_count":17,"forks_count":317,"subscribers_count":140,"default_branch":"master","last_synced_at":"2025-04-13T19:50:04.779Z","etag":null,"topics":["microservice","microservice-framework","mvc","php","php-framework","php-msf","swoole","swoole-framework"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinguo.png","metadata":{"files":{"readme":"README.md","changelog":"changes.txt","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-01T09:43:05.000Z","updated_at":"2025-04-12T14:30:10.000Z","dependencies_parsed_at":"2022-08-23T23:31:10.333Z","dependency_job_id":null,"html_url":"https://github.com/pinguo/php-msf","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguo%2Fphp-msf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguo%2Fphp-msf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguo%2Fphp-msf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguo%2Fphp-msf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinguo","download_url":"https://codeload.github.com/pinguo/php-msf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254243362,"owners_count":22038046,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["microservice","microservice-framework","mvc","php","php-framework","php-msf","swoole","swoole-framework"],"created_at":"2024-08-02T21:01:00.612Z","updated_at":"2025-05-14T23:06:58.296Z","avatar_url":"https://github.com/pinguo.png","language":"PHP","readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"./php-msf.png\"/\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg class=\"latest_stable_version_img\" src=\"https://poser.pugx.org/pinguo/php-msf/version\"\u003e\n\u003cimg class=\"total_img\" src=\"https://poser.pugx.org/pinguo/php-msf/downloads\"\u003e\n\u003cimg class=\"latest_unstable_version_img\" src=\"https://poser.pugx.org/pinguo/php-msf/v/unstable\"\u003e\n\u003cimg class=\"license_img\" src=\"https://poser.pugx.org/pinguo/php-msf/license\"\u003e\n\u003cimg class=\"composer_img\" src=\"https://poser.pugx.org/pinguo/php-msf/composerlock\"\u003e\n\u003cp/\u003e\n\n# Micro Service Framework For PHP\n\nPHP微服务框架即“Micro Service Framework For PHP”，是[Camera360](https://www.camera360.com)社区服务器端团队基于[Swoole](http://www.swoole.com)自主研发现代化的PHP协程服务框架，简称msf或者php-msf，是[Swoole](http://www.swoole.com)的工程级企业应用框架，经受了Camera360亿级用户高并发大流量的考验。php-msf由[Camera360](https://www.camera360.com)服务器团队主导研发，会持续更新与维护，也希望有更多优秀的[Swoole](http://www.swoole.com)应用实践开发者加入。php-msf核心设计思想是采用协程、异步、并行的创新技术手段提高系统的单机吞吐能力，降低整体服务器成本。\n\n## 主要特性\n\n* 精简版的MVC框架\n* IO密集性业务的单机处理能力提升5-10倍\n* 代码常驻内存\n* 支持对象池\n* 支持Redis连接池、MySQL连接池（异步与同步）\n* 内置Redis Proxy，支持分布式、master-slave集群（故障自动failover与recovery）\n* 内置MySQL Proxy，master-slave集群（读写分离、事务）\n* 支持异步、并行\n* 基于PHP Yield实现协程\n* 内建http/redis/mysql/mongodb/task等协程客户端\n* 纯异步的Http Server\n* RPC Server/Client\n* 支持命令行模式\n* 支持独立进程的定时器\n* 支持独立配置进程\n* 支持sendfile静态文件(需配置root目录)\n\n## 环境要求\n\n- Linux，FreeBSD，MacOS(有兼容问题)\n- Linux内核版本2.3.32以上(支持epoll)\n- PHP-7.0及以上版本（生产环境建议使用PHP-7.1）\n- gcc-4.4以上版本\n- [swoole-1.9.15](https://github.com/swoole/swoole-src/archive/v1.9.15.tar.gz)及以上版本（暂不支持Swoole-2.0）\n- [hiredis-0.13.3](https://github.com/redis/hiredis/archive/v0.13.3.tar.gz)\n- [yac](https://github.com/laruence/yac/archive/yac-2.0.2.tar.gz)\n- [phpredis](http://pecl.php.net/get/redis-3.1.2.tgz)\n- composer\n\n## 文档\n\n框架手册(Gitbook): [PHP-MSF开发手册](https://pinguo.gitbooks.io/php-msf-docs/)\n\nAPI Document(Rawgit): [类文档](https://cdn.rawgit.com/pinguo/php-msf-docs/4e0ed09d/api-document/index.html)\n\n示例DEMO项目: [PHP-MSF DEMO](https://github.com/pinguo/php-msf-demo)\n\n帮助完善文档: [https://github.com/pinguo/php-msf-docs](https://github.com/pinguo/php-msf-docs)，请提交PR。\n\n## 交流与反馈\n\nPHP-MSF#1群(QQ): 614054288\n\n## 快速起步\n\n```bash\n$\u003ephp -r \"copy('https://raw.githubusercontent.com/pinguo/php-msf-docker/master/installer.php', 'installer.php');include('installer.php');\" \u0026\u0026 source ~/.bashrc\n```\n\n`installer.php`会检查运行环境，根据你的自定义配置，自动创建项目模板，composer安装依赖，启动服务。如果`cdn.rawgit.com`无法访问，可以直接克隆或者下载[php-msf-docker](https://github.com/pinguo/php-msf-docker)，提取`installer.php`，然后直接运行`php installer.php`\n\n如果一切顺利，运行到最后你将看到如下的输出：\n\n```bash\n[2017-09-06 16:08:34] Run composer install success\n[2017-09-06 16:08:34] Congratulations, all are installed successfully!\n[2017-09-06 16:08:34] You can, visit http://127.0.0.1:8990/Welcome for test\n      _______                               ____\n________  / /_  ____        ____ ___  _____/ __/\n___/ __ \\/ __ \\/ __ \\______/ __ `__ \\/ ___/ /_\n__/ /_/ / / / / /_/ /_____/ / / / / (__  ) __/\n_/ .___/_/ /_/ .___/     /_/ /_/ /_/____/_/\n/_/         /_/         Camera360 Open Source TM\n[2017-09-06 16:08:34] Swoole  Version: 1.9.18\n[2017-09-06 16:08:34] PHP     Version: 7.1.8\n[2017-09-06 16:08:34] Application ENV: docker\n[2017-09-06 16:08:34] Listen     Addr: 0.0.0.0\n[2017-09-06 16:08:34] Listen     Port: 8990\n```\n\n访问测试：\n\n```bash\n$\u003ecurl http://127.0.0.1:8990/Welcome\nhello world!\n```\n\n注意端口，如果你不是8990，你需要修改，然后访问测试。\n\n## 标准应用结构\n\n```\n├── app // PHP业务代码\n│   ├── AppServer.php // 应用server类，可根据需求自定义\n│   ├── Controllers // 控制器类目录\n│   ├── Lib // 特殊逻辑处理类目录\n│   ├── Models // Model类目录\n│   ├── Route // 特殊路由规则类目录\n│   ├── Tasks // Task类目录\n│   └── Views // 视图文件目录\n├── build.sh // 构建脚本（拉取docker镜像，启动容器）\n├── checkstyle.sh // 代码检查脚本\n├── composer.json // composer包依赖配置文件\n├── config // 配置目录\n├── server.php // server启动脚本\n├── console.php // 命令行脚本\n├── test // 单元测试目录\n```\n\n上述为基于php-msf的标准应用结构，一键安装程序installer.php会自动生成目录，用户可以根据需求创建一些自定义目录，只要符合psr4标准即可自动加载。\n\n## 服务启动\n\n调试模式\n\n```bash\n$\u003e./server.php start\n```\n\nDaemon模式\n\n```bash\n$\u003e./server.php start -d\n```\n\n\n停止服务\n\n```bash\n$\u003e./server.php stop\n```\n\n重启服务\n\n```bash\n$\u003e./server.php restart\n```\n\n## Docker\n\n我们制作了Docker镜像，方便Docker用户快速的安装环境，运行[PHP-MSF DEMO](https://github.com/pinguo/php-msf-demo)工程。另外期望在开发环境修改代码实时预览效果，建议使用Docker for [Mac](https://download.docker.com/mac/stable/Docker.dmg)/[Windows](https://download.docker.com/win/stable/InstallDocker.msi)桌面版。\n\n如果是升级Docker，它会自动迁移原有的镜像和容器，请耐心等待，千万不能中途kill掉Docker进程，否则再想迁移就难了。\n\nDocker Registry(阿里云):\n\n- 公网地址: `docker pull registry.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest`\n- 经典内网: `docker pull registry-internal.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest`\n- VPC网络: `docker pull registry-vpc.cn-hangzhou.aliyuncs.com/pinguo-ops/php-msf-docker:latest`\n- DockerHub(国外): `docker pull pinguoops/php-msf-docker`\n\n\n\n## 框架定位\n\n我们专注打造稳定高性能纯异步基于HTTP的微服务框架，作为nginx+php-fpm的替代技术栈实现架构的微服务化;而Tcp/WebSocket Server将作为插件的形势支持，或者作为其他独立的开源项目。\n\n对于小型团队或者业务系统我们建议还是采用传统的nginx+php-fpm技术栈，对于成本和性能来说没有瓶颈，也就完全没有必要引入全新的技术栈。\n\n对于大中型团队或者业务系统，处在服务治理或者服务化演进的重要阶段，php-msf是可选方案之一。\n\n对于庞大的PHP应用集群，想要大幅节约服务器成本，提升服务性能，php-msf是可选方案之一。\n\n对于聚合服务，比如大型的网站首页，想要通过服务器端聚合内容整合数据，php-msf是可选方案之一。\n\n## 手工安装\n\n推荐安装方式，通过编辑项目`composer.json`加入依赖`pinguo/php-msf`\n\n```json\n{\n    \"require\": {\n        \"pinguo/php-msf\": \"\u003e=3.0.0\"\n    },\n    \"minimum-stability\": \"dev\"\n}\n```\n\n`\"minimum-stability\": \"dev\"`这个配置选项必须加上，因为日志组件依赖`\"monolog/monolog\": \"2.0.x-dev\"`，并且`monolog/monolog`无2.0的release包，不过我们在生产环境已经验证其稳定性。\n\n## 项目原则\n\n### 稳定\n\nphp-msf经受了[Camera360](https://www.camera360.com)社区服务大流量、高并发的洗礼，稳定性得到充分验证。稳定性是我们花了大量时间、精力去解决的最重要问题，是三大原则的最重要原则。\n\n### 高性能\n\nIO密集性业务的单机处理能力提升5-10倍，这是生产环境中得出的真实数据，如Camera360社区某聚合服务在流量高峰需要40台服务器抗住流量，而采用php-msf重构之后只需要4台相同配置的服务器就可以抗住所有流量。\n\n### 简单\n\n由于Swoole复杂的进程模型，并且有同步阻塞和异步非阻塞之分，所以在运行相同代码逻辑时，可能在调用方式、传递参数都不一致，从而直线拉高了学习成本，我们为了屏蔽低层的差异，做了大量的工作，实现和传统MVC框架的唯一区别在于添加“yield”关键字。我们参考了Yii2框架的部分代码实践，我们期望无缝的从Yii2开发切换过来。\n\n上述三大原则，是我们在新增特性、功能实现时，投票或者合并代码的依据，任何影响这些原则的PR也将会被拒绝。\n\n## 关于协程\n\n目前社区有几个PHP开源项目支持协程，它们大多采用Generator+Yield来实现，但是实现的细微差别会导致性能相差甚远，我们应该认识到协程能够以同步的代码书写方式而运行异步逻辑，故协程调度器的性能一定要足够的高，php-msf的协程调度性能是原生异步回调方式的80%，也就是说某个API采用原生异步回调写法QPS为10000，通过php-msf协程调度器调度QPS为8000。\n\n## 为什么是微服务框架？\n\n目前php-msf还在起步阶段，我们花了大量的时间和精力解决稳定性、高性能、内存问题，因为我们认为“基石”是“万丈高楼”的最基本的保障，只有基础打得牢，才能将“大楼”建设得“更高”。3.0版本是我们开源的起始版本，是我们迈出的重要一步，接下来我们重点会是分布式微服务框架的打磨。\n\n另外，由于基于PHP常驻进程，并直接解析HTTP或者TCP请求，这是服务化最重要的支撑，基于此我们可以做很多原来不敢去实现的想法，总之想像空间很大。\n\n## 感谢\n\nphp-msf最开始基于[SwooleDistributed-1.7.x](https://github.com/tmtbe/SwooleDistributed/)开发，而此次开源版本中，连接池主要采用了SD的实现。由于我们框架定位、解决的业务场景、稳定性的要求、代码风格等差异太大，因此我们决定自主研发微服务框架，每个框架都有自己的特色和优点，选择合适自己公司和业务场景的框架最重要，同时在此也感谢[白猫](https://github.com/tmtbe)；另外，在研发php-msf框架及生产环境应用过程中，遇到很多底层问题，不过都一一解决，而这些问题能够解决最重要就是[Swoole](http://www.swoole.com)开源项目创始人[韩天峰-Rango](https://github.com/matyhtf)的大力支持，在此深表感谢。\n\n## License\n\nGNU General Public License, version 2 see [https://www.gnu.org/licenses/gpl-2.0.html](https://www.gnu.org/licenses/gpl-2.0.html)\n","funding_links":[],"categories":["目录","Framework","PHP","swoole","框架( Frameworks )"],"sub_categories":["框架 frameworks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinguo%2Fphp-msf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinguo%2Fphp-msf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinguo%2Fphp-msf/lists"}