{"id":20790562,"url":"https://github.com/chsword/centerhub","last_synced_at":"2026-04-04T03:33:31.806Z","repository":{"id":138836658,"uuid":"97587821","full_name":"chsword/CenterHub","owner":"chsword","description":null,"archived":false,"fork":false,"pushed_at":"2017-07-25T04:18:33.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-18T10:32:25.152Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chsword.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-18T10:55:43.000Z","updated_at":"2017-07-18T10:55:43.000Z","dependencies_parsed_at":"2023-03-17T23:15:56.519Z","dependency_job_id":null,"html_url":"https://github.com/chsword/CenterHub","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsword%2FCenterHub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsword%2FCenterHub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsword%2FCenterHub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chsword%2FCenterHub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chsword","download_url":"https://codeload.github.com/chsword/CenterHub/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243136242,"owners_count":20241988,"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-11-17T15:35:52.156Z","updated_at":"2025-12-27T06:32:47.147Z","avatar_url":"https://github.com/chsword.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# CenterHub\n- [x] 1. 基于 SignalR\n- [x] 1. 使用此 Hub 进行统一的数据修改推送\n- [ ] 1. 使用 WebApi 进行统一的数据操作、获取和提交\n- [x] 1. 可以连接 EF 的 SaveChanges 在进行数据修改时进行处理\n- [x] 1. 默认使用内存处理消息队列\n- [ ] 1. 增加扩展 Redis 处理消息队列\n\n## 服务器端实现\n\n### Listener\n处理 Queue 中的信息\n成功取出队列 -\u003e 查询队列中的 Method 对象 -\u003e 获取指定的 ClientGroup -\u003e 判断是否推送理改产生的 Model -\u003e 判断是否满足推送条件\n\n\n- [ ] 1. 针对一系统多项目\n  1. ClientGroup 的组名需要自定义（系统注册时定义规则）\n\n\n### Publish\n- [x] 支持 EF 直接在 SaveChanges 时进行通知\n``` c#\n//publish info to queue\n//Publish(typeof(Task),Id,ProductId,XType.Modified,Properties);\n//Publish(typeof(Task),task,XType.Modified,Properties);\nPublish(entity);// in ef \n```\n### Register in Hub \n\n方法参数\n\n\n- [x] Register(typeof(Task), XType.Created, \"clientMethodName\");\n- [x] Register(typeof(Task), XType.Modified | XType.Created, \"clientMethodName\");\n- [x] Register(typeof(Task), XType.Modified, \"clientMethodName\", (d) =\u003e d[\"UserId\"].Equals(3));\n\n- [ ] 区分是否进行批量推送\n- [ ] Register**Duplicate** // one message one push\n- [ ] Register // batch message one push\n\n\nv2.0\n- [ ] RegisterPersistence or not // if no client active not push while client well\n\n### XType Desgin\n- [x] 完成操作类型检测\n``` yml\nXType\n    - Created\n    - Modified\n    - Deleted\n    - \\\\ SpicalPropertyModified\n```\n## 客户端实现\n\n- [ ] 1. 零散的注册方法\n- [ ] 2. 收集零散的注册方法\n- [x] 3. 统一的 SignalR 启动方式\n\n\n\n### 问题及解决方案\n- [x] 1. 如何解决使用字符串调用方法的问题\n``` C#\nvar client=((IClientProxy)GlobalHost.ConnectionManager.GetHubContext\u003cCenterHub\u003e()\n                                .Clients.All);\nclient.Invoke(method, arg1, arg2);\n```\n- [x] 2. 如何解决服务器端得知客户端方法的问题\n\n~~~暂考虑分组问题~~~\n使用双向注册 服务器端注册一次，客户端注册一次，双向注册匹配的才进行推送\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchsword%2Fcenterhub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchsword%2Fcenterhub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchsword%2Fcenterhub/lists"}