{"repo":"dengzii/glide-im","free":true,"listed":false,"github":"https://github.com/dengzii/glide-im","clone":"git clone https://github.com/dengzii/glide-im.git","description":"glide instant-messaging service","language":"Go","stars":305,"topics":["instant-messaging","go-im","golang","distributed","im"],"license":"MIT","category":"dev-tools","readme_excerpt":"Glide Glide 是一个轻量、快速、稳定、可拓展的消息服务。定位为单体 IM 服务实现，提供长连接网关、消息路由、群聊/订阅等能力，并通过 RPC 对外暴露管理接口。 项目定位与边界 - 提供长连接接入（TCP/WS）、客户端会话管理、消息路由与转发等核心能力。 - 支持群聊/订阅场景，面向业务侧提供 RPC 管理接口。 - 仅负责消息转发与存储等流程相关能力，用户体系、关系、群管理等由配套 HTTP API 服务负责。 架构概览 - 消息流转路径 ：客户端连接（ pkg/conn ）→ 网关（ pkg/gate ）→ 路由层（ pkg/messaging ）→ 具体处理器（聊天/订阅/心跳等）→ 存储或分发。 - 管理路径 ：业务 HTTP API 服务通过 RPC 调用本服务（ im service/server ），执行踢人、推送、订阅管理等操作。 - 内部事件 ：上线/下线通过 internal.online / internal.offline 触发内部路由与订阅联动。 模块详解 - cmd/im service : 服务启动入口与整体装配。 - pkg/conn : TCP/WS 连接抽象与服务端实现。 - pkg/gate : 长连接网关，负责客户端生命周期管理、鉴权、设置/解绑 id、推送与断连。 - pkg/messaging : 消息路由层，按消息类型分发到具体处理器（聊天、心跳、订阅、离线等）。 - pkg/subscription + pkg/subscription/subscription impl : 频道/群聊订阅、权限校验与消息分发。 - pkg/messages : 公共消息协议、动作定义与编解码器， GlideMessage 为基础消息实体。 - pkg/rpc + im service/client server : 对外 RPC 管理接口与客户端封装。 - pkg/store + internal/message store db : 消息存储与持久化实现。 - internal/world channel : 世界频道相关实现（示例场景）。 - config : 配置加载与默认配置。 - pkg/hash 、 pkg/timingwheel : 一致性哈希与定时轮等基础组件。 协议与动作 消息结构（ GlideMessage ） - ver : 协议版本。 - seq : 消息序号，用于确认/重发等流程。 - action : 动作类型（字符串）。 - from / to : 发送者与接收者标识。 - data : 消息体（JSON），接收端在 Data.Deserialize 时进行反序列化。 - ticket / sign : 鉴权与签名相关字段（聊天/群聊消息会校验）。 - extra : 扩展字段。 常用动作分类（ pkg/messages/actions.go ） - 系统/心跳： hello 、 heartbeat 、 notify. - 鉴权： authenticate - 单聊/群聊： message.chat 、 message.chat.resend 、 message.group 、 message.group.notify - ACK： ack.request 、 ack.message 、 ack.group.msg 、 ack.notify 、 ack.offline - 订阅/接口： api.group.members 、 api.state.sub 、 api.su","default_branch":null,"files":null,"tree":[],"storefront":"/r/dengzii","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/dengzii/glide-im/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}