Skip to content

LDepression/go-chat

Repository files navigation

go-chat

该项目是是要使用golang开发的基于websocket的简单聊天室

项目接口文档 https://apifox.com/apidoc/shared-a4e0cb5e-3af5-4733-8d2e-edced8e98c62

pkg目录是已经封装好的工具包直接使用即可

在config/app.yaml目录下,新建如下配置文件

Serve:
  addr: ":8084"
  read_timeout: 5s #读超时的时间
  write_timeout: 5s #写超时的时间
  default_timeout: 30s #优雅退出的时间
Mysql:
  user: "root"
  password: "123456"
  host: "127.0.0.1"
  port: 3306
  dbName: "chat_app"
Log: # 日志配置文件
  Level: debug
  LogSavePath: "storage/Applogs/" # 日志保存路径
  HighLevelFile: error          # 高级别日志文件名
  LowLevelFile: info          # 低级别文件名
  LogFileExt: .log          # 日志文件后缀
  MaxSize: 10 # 日志文件最大大小
  MaxAge: 30 # 日志文件最大保存天数
  MaxBackups: 7 # 最大备份数
  Compress: false # 是否压缩
SMTPInfo:
  host: "smtp.qq.com"
  port: 465
  userName: "***@qq.com"
  password: "***" #密码
  isSSL: true
  from: "***@qq.com" #发件人
  to: #接收人
    - "***@qq.com"
Redis:
  addr: "127.0.0.1:6379"
  password: "***"
  poolSize: 20
  CacheTime: 1h
Work: #工作池配置
  TaskChanCapacity: 50 # 任务队列容量
  WorkerChanCapacity: 50 # 工作队列容量
  WorkerNum: 10 # 工作池数量
Rule:
  delUserTime: "60s"
  delCodeTime: "120s"
  accountMaxNums: 5
  DefaultAccountAvatar: "http://lycmall.lyc666.xyz/chat/first.jpg"
  DefaultClientTimeout: "20s"
  FileMaxSize: 1024000
  DefaultInsertDataNum : 50
Auto:
  retry:
    timeDuration: 5s
    timeCount: 3
Token:
  Key: "***"
  AccessTokenExpire: 168h
  RefreshTokenExpire: 720h
  AccountTokenExpire: 24h
  AuthType: "x_token"
  AuthKey: "Claims"
Page:
  DefaultPageSize: 10
  MaxPageSize: 200
  PageKey: page
  PageSizeKey: page_size
AliyunOSS:
  Endpoint: "http://oss-cn-hangzhou.aliyuncs.com"
  AccessKeyId: "***"
  AccessKeySecret: "***"
  BucketName: "lycmall2"
  BucketUrl: "chat"
  BasePath: "***"
Rocketmq:
  Addr: "192.168.28.3"
  Port: 9876

项目功能:

 1.一个用户可以有多种职责,各个账号之间的信息是独立的

 2.好友之间可以进行好友申请

 3.好友之间可以发送消息,消息可以是文本,图片,视频之类的。消息支持pin,撤回,回复等相关操作

 4.支持消息的已读未读功能

 5.支持离线消息

 6.用户长时间未进行操作,则将其强制下线

 7.系统消息进行多设备推送

项目亮点:

 1.使用单用户多账号,实现用户的解耦

 2.支持多设备同时在线,消息同步推送

 3.使用了协程池技术,做一些任务的异步化

 4.邮箱模块使用map + 定时器

 5.使用令牌桶对ip和api进行限流

 6.代码风格简洁,清爽。单元测试规范

项目待优化点:

1.数据库的表结构设计不太合理,例如消息表的设计

2.ws服务可以使用RPC通信

About

使用go语言开发的聊天服务器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors