jim

command module
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2023 License: MIT Imports: 6 Imported by: 0

README

JIM 一个简单的聊天系统

(本代码仅供学习,严禁用于非法行为)

简介

JIM 是一个轻量的聊天系统,

  • 代码纯golang编写,支持私聊、群聊和世界频道聊天
  • 实现了一些常用的功能。包括邀请成为好友、搜索好友、加好友、删好友、创建群、加入群、邀请进群、退出群等常规接口。
  • 业务易扩展,代码相对整洁,有做了详细备注
  • 日志系统相对完善,详细记录了业务各项字段,日志输出为json格式,方便ELK收集使用。
  • 使用交叉编译可以进行跨平台编译及部署
  • 使用swag文档规范,使用swag init 即可生成对应API文档,方便前端进行调试
  • 漂亮的前端界面
  • 使用了神奇的github action,多平台编译,可在release下载对应平台执行文件

相关组件

语言:  golang  
依赖服务:  redis、mongodb、mysql/mariadb
日志包: github.com/rs/zerolog
sql操作: github.com/jmoiron/sqlx

设计

1)MySQL作为用户信息、好友关系、群组信息的存储数据库;MongoDB用于消息存储数据库。 Redis作为订阅服务、缓存存储服务。
2)用户登录获取token,并使用token进行建立ws链接,由于发送消息需要权限验证及一些策略过滤,需要响应是否发送完成,所以ws链接一般只用于接收服务端消息,发送聊天消息不依赖ws。
3)在多服务实例的情况下,由于用户建立WS链接的服务器是随机的,所以我们在每个服务实例里使用`websocket.manager`包的管理器进行链接统一管理,订阅到的数据最终也有管理器进行分发到不同的用户链接上。
4)因为我们需要管理聊天消息,所以发消息时,消息是先入库,成功后再进行订阅推送。
5)支持获取每个房间的最近X条消息,及历史消息遍历。

设计图纸

消息发送基本架构图

消息发送时序图

初始化

1. 部署好相关服务:mysql/mariadb、mongodb、redis
2. 配置config文件:config.yml从文件夹 config 里面获取,并修改成对应的服务地址
3. 将sql文件夹里的创表sql语句文件导入到mysql/mariadb中,其中,`all.sql`为所有数据库创建语句,其他的为各个表的单独创建语句

功能

以下是计划中的功能

账户

+[x] Websocket通道 -[x] 跨服务器推送
-[x] 接收聊天消息 -[x] 接收通知消息 +[x] 用户注册 -[ ] 验证码验证 -[ ] 强密码验证 -[ ] 邮箱绑定 -[ ] 限定注册时限开关 +[x] 用户登录 -[ ] 验证码验证 -[x] 被禁用无法登录 -[x] 被删除无法登录 -[ ] 用户登出 -[x] 账户信息 -[ ] 密码修改 -[ ] 头型修改 -[ ] 昵称修改 -[ ] 在线状态修改

好友

-[x] 查找好友 -[x] 按ID查找 -[x] 按昵称查找 -[x] 好友申请 -[x] 申请好友时进行备注 -[x] 成为好友时同时打招呼 -[x] 好友编辑 -[x] 修改备注 -[x] 移除好友 -[ ] 移除后删除所有聊天记录 -[x] 拉黑好友 -[ ] 拉黑后删除无法再次被加为好友 -[ ] 好友列表 -[ ] 隐身好友不显示

群组

+[x] 创建群组 +[x] 加入群组 +[x] 群成员管理 -[x] 限制成员人数 -[ ] 黑名单群成员禁止再次进群 -[x] 移除群成员 -[ ] 移除群成员时同时设置黑名单 -[x] 指定群管理员 -[ ] 修改群成员群内昵称 +[x] 群信息修改 -[x] 群主转移 -[x] 群昵称修改 -[ ] 群头像修改 -[x] 退出群组 -[ ] 解散群组

聊天

-[ ] 聊天列表 -[ ] 置顶聊天 -[ ] 聊天列表最后一条消息 -[x] 私聊 -[x] 纯文本聊天 -[ ] 发送图片 -[ ] 发送表情包 -[ ] 发送视频 -[ ] 发送语音 -[ ] 发送位置 -[ ] 语音聊天 -[ ] 视频聊天 -[ ] 私聊消息已读 -[x] 被好友拉黑无法对话 -[x] 被好友删除无法对话 -[x] 群聊 -[x] 纯文本聊天 -[ ] 发送图片 -[ ] 发送表情包 -[ ] 发送视频 -[ ] 发送语音 -[ ] 发送位置 -[ ] 语音聊天 -[ ] 视频聊天 -[ ] 消息已读 -[x] 全体禁言 -[x] 某群成员禁言 -[x] 世界频道聊天 -[ ] 世界频道开关 -[ ] 世界频道禁言

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL