{"id":13748173,"url":"https://github.com/fucongcong/GroupCo","last_synced_at":"2025-05-09T10:32:16.560Z","repository":{"id":86485614,"uuid":"95846127","full_name":"fucongcong/GroupCo","owner":"fucongcong","description":"PHP的服务化框架。适用于Api、Http Server、Rpc Server；帮助原生PHP项目转向微服务化。出色的性能与支持高并发的协程相结合","archived":false,"fork":false,"pushed_at":"2020-07-28T02:20:22.000Z","size":974,"stargazers_count":479,"open_issues_count":2,"forks_count":68,"subscribers_count":37,"default_branch":"master","last_synced_at":"2024-05-22T19:30:21.344Z","etag":null,"topics":["async","bff","coroutines","generator","mysql","pool","redis","soa","swoole"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fucongcong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-06-30T03:48:46.000Z","updated_at":"2024-03-16T07:35:25.000Z","dependencies_parsed_at":"2023-03-02T18:00:35.000Z","dependency_job_id":null,"html_url":"https://github.com/fucongcong/GroupCo","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fucongcong%2FGroupCo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fucongcong%2FGroupCo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fucongcong%2FGroupCo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fucongcong%2FGroupCo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fucongcong","download_url":"https://codeload.github.com/fucongcong/GroupCo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253234178,"owners_count":21875561,"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":["async","bff","coroutines","generator","mysql","pool","redis","soa","swoole"],"created_at":"2024-08-03T07:00:36.145Z","updated_at":"2025-05-09T10:32:15.888Z","avatar_url":"https://github.com/fucongcong.png","language":"PHP","funding_links":[],"categories":["Framework"],"sub_categories":[],"readme":"# Group-Co\n\n[![Build Status](https://travis-ci.org/fucongcong/co-framework.svg?branch=master)](https://travis-ci.org/fucongcong/Group-Co) \n[![Code Climate](https://codeclimate.com/github/fucongcong/co-framework/badges/gpa.svg)](https://github.com/fucongcong/Group-Co)\n\n### V2.0的几个重要改动 \n- 不在支持php5.6以下版本。php\u003e=7.0\n- 基础服务之间的依赖与通信松耦合(写业务时要考虑到事务的处理)\n- 数据传输通过protobuf编码，所以基础服务层编码规范要严格定义数据类型\n- 将基础服务拆分了，单独分离了接口(API interface)与ServiceImpl。\n\n### [V1.X版本](https://github.com/fucongcong/GroupCo/tree/v1.1.1)\n\n### 框架结构\n\n框架其实分为两大板块, 协程客户端(BFF —— Backend For Frontend)与提供基础服务的服务端。\n\n#### 客户端（BFF）\n* 利用协程特性以同步方式来编写异步代码，增强可读性。\n* 将swoole的异步特性与传统框架的MVC相结合。\n* 和nodejs类似，BFF端应该是胶水层(类似传统MVC的控制层)，API提供者\n\n#### 服务端 \n* 利用swoole的多进程模式创建，当前版本仅支持RPC调用。\n\n#### 服务化\n* 目前实现了以Zookeeper、Redis、Mysql为注册中心的服务化治理.\n* 支持了Apollo的配置中心化\n* 服务发现，客户端缓存、心跳检测、服务监听\n\n### 如何使用协程客户端，与传统框架的区别？\n* 框架基本使用与传统框架基本一致，路由，控制器，调用基础服务\n* 在异步调用的地方需要以yield关键词来触发协程切换\n\n### 为什么服务端不采用swoole的4.X版本协程？\n* 业务码迁移方便。不使用协程，在原项目或者新项目微服务化时，可以无脑迁移，完全不用担心协程化导致的连接释放、全局变量问题等等诸多限制。\n* 多进程模式可以将单连接请求速度优化，利用task机制\n* 稳定性、已得到线上验证\n\n### 生产环境使用\n* GroupCo框架目前已经全线用于我们团队，日均处理请求百万次。响应时间平均在0.1ms-10ms左右(视业务而定)\n* 大型项目，服务发现不建议使用redis/mysql。也可以自己集成etcd/consul等其他服务发现工具（框架后面会更新支持）\n\n### 特性\n\n* 全异步协程调度，支持高并发\n* 服务发现，客户端缓存、心跳检测、服务监听\n* 统一配置中心\n* 异步TCP，HTTP客户端\n* 异步日志\n* 异步文件读写\n* 异步Mysql\n* 异步Mysql事务处理\n* 异步Redis\n* 支持Tcp、Mysql、Redis、WebSocket连接池\n* SOA服务化调用，内部封装完整的RPC通信，服务端采用异步Task处理后合并数据并返回。\n* 异步TCP客户端支持并行、串行调用\n* Twig、Doctrine支持视图、服务数据层\n* 单元测试覆盖\n\n### 文档总览\n\n* 快速开始\n  * [环境依赖](doc/yin-yan/huan-jing-yi-lai.md)\n  * [启动项目](doc/yin-yan/qi-dong-xiang-mu.md)\n  * [Docker容器启动](doc/yin-yan/docker.md)\n* 客户端\n  * [异步Tcp客户端](doc/kuang-jia-fu-wu/yi-bu-tcp-ke-hu-duan.md)\n  * [异步WebSocket客户端](doc/kuang-jia-fu-wu/yi-bu-websocket-ke-hu-duan.md)\n  * [异步Http客户端](doc/kuang-jia-fu-wu/yi-bu-http-ke-hu-duan.md)\n  * [异步Redis客户端](doc/kuang-jia-fu-wu/sd.md)\n  * [异步Mysql客户端](doc/kuang-jia-fu-wu/yi-bu-mysql-ke-hu-duan.md)\n  * [异步Log日志](doc/kuang-jia-fu-wu/yi-bu-log.md)\n  * [异步文件读写](doc/kuang-jia-fu-wu/yi-bu-wen-jian-du-xie.md)\n  * [异常Exception](doc/kuang-jia-fu-wu/yi-chang-exception.md)\n* 服务端\\(用于基础服务开发\\)\n  * [Service](doc/tong-bu-fu-wu/service.md)\n  * [Dao](doc/tong-bu-fu-wu/dao.md)\n  * [Cache](doc/tong-bu-fu-wu/rediscache.md)\n  * [Log日志类](doc/tong-bu-fu-wu/logri-zhi-lei.md)\n  * [FileCache文件缓存类](doc/tong-bu-fu-wu/filecachewen-jian-huan-cun-lei.md)\n* 服务中心\n  * [服务治理流程](doc/fu-wu-zhong-xin/fu-wu-zhi-li-liu-cheng.md)\n  * [注册中心](doc/fu-wu-zhong-xin/zhu-ce-zhong-xin.md)\n  * [服务调用](doc/fu-wu-zhong-xin/yi-bu-http-server-zhong-shi-yong-fu-wu.md)\n  * [使用TCP连接池](doc/fu-wu-zhong-xin/yi-bu-http-server-lian-jie-chi.md)\n  * [服务调用监控](doc/fu-wu-zhong-xin/fu-wu-diao-yong-jian-kong.md)\n  * [服务调用失败事件](doc/fu-wu-zhong-xin/fu-wu-diao-yong-shi-bai.md)\n  * [调试模式](doc/fu-wu-zhong-xin/diao-shi-mo-shi.md)\n* 配置中心\n  * [配置中心的使用](doc/pei-zhi-zhong-xin/shi-yong.md)\n* 框架基础类\n  * [Config配置类](doc/ji-chu-fu-wu/config.md)\n  * [StaticCache静态缓存类](doc/ji-chu-fu-wu/staticcache.md)\n  * [Route路由类](doc/ji-chu-fu-wu/routelu-you-lei.md)\n  * [Controller控制器类](doc/ji-chu-fu-wu/controllerkong-zhi-qi-lei.md)\n  * [View视图类](doc/ji-chu-fu-wu/viewshi-tu-lei.md)\n  * [Request请求类](doc/ji-chu-fu-wu/requestqing-qiu-lei.md)\n  * [Response响应类](doc/ji-chu-fu-wu/responsexiang-ying-lei.md)\n  * [Event事件类](doc/ji-chu-fu-wu/eventshi-jian-lei.md)\n  * [Listener监听类](doc/ji-chu-fu-wu/listenerjian-ting-lei.md)\n  * [Subscriber多事件监听](doc/ji-chu-fu-wu/subscriberduo-shi-jian-jian-ting.md)\n  * [EventDispatcher事件调度](doc/ji-chu-fu-wu/eventdispatchershi-jian-diao-du-lei.md)\n* [单元测试](doc/dan-yuan-ce-shi/dan-yuan-ce-shi.md)\n* [控制台](doc/kong-zhi-tai/kong-zhi-tai.md)\n\n### 案例Demo与最佳实践\n- [WebSocket简单示例,聊聊集群时的消息转发](doc/demo/ws.md)\n- [实现服务异常邮件通知](doc/demo/fu-wu-yi-chang.md)\n- [秒杀系统,与GO切磋](https://github.com/fucongcong/GroupCo/tree/co/seckill)\n- [日志分析服务](doc/demo/log.md)\n- Api服务\n\n### BUG反馈\n如果你在使用过程中遇到安全或者框架层面使用bug，请提issue。\n\n### 架构模型\n- [架构模型](doc/fu-wu-zhong-xin/jiagou.md)\n\n### 与Go的协程的区别\n基于Swoole的异步与php的Generator实现的异步协程，而go语言是内置协程。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffucongcong%2FGroupCo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffucongcong%2FGroupCo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffucongcong%2FGroupCo/lists"}