{"id":17281584,"url":"https://github.com/sumory/gru","last_synced_at":"2025-04-09T23:19:53.391Z","repository":{"id":145420770,"uuid":"44541113","full_name":"sumory/gru","owner":"sumory","description":"即时通讯服务集群，可用于构建聊天等实时交互系统","archived":false,"fork":false,"pushed_at":"2015-11-24T07:40:24.000Z","size":2084,"stargazers_count":282,"open_issues_count":3,"forks_count":121,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-04-02T21:11:38.752Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"CSS","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/sumory.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}},"created_at":"2015-10-19T14:39:20.000Z","updated_at":"2025-03-03T07:19:59.000Z","dependencies_parsed_at":"2023-04-14T00:55:27.737Z","dependency_job_id":null,"html_url":"https://github.com/sumory/gru","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumory%2Fgru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumory%2Fgru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumory%2Fgru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sumory%2Fgru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sumory","download_url":"https://codeload.github.com/sumory/gru/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248125996,"owners_count":21051847,"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":[],"created_at":"2024-10-15T09:46:15.948Z","updated_at":"2025-04-09T23:19:53.372Z","avatar_url":"https://github.com/sumory.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Gru\n\n**Gru**是一个长连接服务解决方案，可用于各种类型的实时交互应用。\n\n\n#### 目前主要模块\n\n- common 通用的一些代码、工具类等\n- idgen 消息id、某些业务id生成服务\n- ticket \n  - 处于最前端，客户端首先请求该服务拿到ticket才能建立长连接\n  - 目前实现了基于一致性hash的负载均衡，将客户端路由到不同的spear节点\n  - 其它位于前端的策略，如准入机制等可在此模块扩展\n- stat 统计模块、业务模块\n  - 目前实现了在线统计，数据存储在redis\n  - 若还需要后端接入其他业务服务，可在此模块扩展\n- spear 长连接服务模块\n  - 提供长连接接入的模块\n  - 最小化模式部署时只需要此模块的一个实例即可\n- minions 监控模块\n  - 目前可监控集群长连接服务spear节点数、每个节点的用户数等\n  - 节点间管理、用户管理可在此模块扩展\n- spear-client 客户端模拟，压测示例代码\n- 示例项目: [gru-example](https://github.com/sumory/gru-example)\n  - 以IM作为示例展示基于Gru构建实时应用\n  - 支持群聊和单聊\n\n\n#### 特性\n\n- 支持单点部署和集群模式部署\n- 采用[socket.io](http://socket.io)协议\n- 各模块均支持水平扩展\n- 单节点可服务10W+以上长连接，具体为在不断发消息的情况下(1000条/秒)，单长连接服务节点支持的稳定连接数量在10W+(8核16G)\n- 节点间通讯支持多种方式：进程内、redis、rocketmq\n\n\n#### 安装部署\n\ngit clone https://github.com/sumory/gru.git /data/tmp/gru\n\n##### 最小安装，单点部署\n\n如果只想体验单节点的部署模式，不需要监控、负载均衡及其它业务服务，只需要部署一个spear节点即可。部署方式如下：\n\n```\ncd /data/tmp/gru\nmvn install #本地安装\ncd spear\nmvn clean package -Pdev #生成spear可运行包，使用dev的配置文件\ncd target/release #该目录下有所有spear运行需要的文件\nll conf # 主要配置文件位于conf/system.properties下，默认以single模式运行，不依赖zookeeper/redis等\nsh bin/start.sh # 启动\n\n```\n以上步骤完成后即可在本地的31001端口开启一个spear实例监听，等待客户端连接。\n\n若想查看如何使用该spear实例，请移步[gru-example](https://github.com/sumory/gru-example),启动该项目，访问http://127.0.0.1:60000即可。\n\n\n##### 集群方式部署\n\n集群的安装配置较为复杂，详见[Gru集群安装配置](docs/cluster_install.md)\n\n\n#### 监控后台screenshots\n\n\u003ctable\u003e\n    \u003ctr\u003e\n        \u003ctd width=\"50%\"\u003e\u003cimg src=\"docs/dashboard-client.png\"/\u003e\u003c/td\u003e\n        \u003ctd width=\"50%\"\u003e\u003cimg src=\"docs/dashboard-monitor.png\"/\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n\u003c/table\u003e\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumory%2Fgru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsumory%2Fgru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsumory%2Fgru/lists"}