基于WebSocket的分布式即时通讯系统

接上文,距离立flag的时间已经过去了一个月了,目前编写的即时通讯系统(Dean)已经有了一个基本雏形,已经实现了的功能,包括:

1、用户的添加、删除、查看、修改接口。

2、一对一文本消息传送、群组文本消息传送。(之后逐步的实现表情、图片、语音、视频、文件等富文本消息)

3、群组创建、查询、修改、删除、退出、销毁、详情查看,以及群成员的添加、踢出等接口。

4、实现了消息发送、回执、离线消息拉取。已阅回执以及消息回撤(正在实现中)。

5、基于etcd的注册以及服务发现。

6、节点内消息路由、节点间的消息路由。

7、客户端心跳检测、基于JWT的鉴权等逻辑。

8、实现了基于redis的异步消息存储入库、热点数据缓存等相关逻辑。

9、实现了布隆过滤器,用于下次ID的首轮验证。(目前还未使用)

10、实现了服务的http/https的切换配置。

11、实现了同账号互踢功能。(后者踢出前者)

12、集成了grpc,用于集群节点间消息路由。

13、简单的实现了前台调试界面(只能叫做调试界面了,太简陋了,前端一点不会,正在一点一点琢磨中)

开发环境

LiteIDE + TextPad(简单的前端编写,之后如果使用vue的话会考虑更换为webstorm)

开发语言:go + 前端

项目架构

客户端与服务端之间采用http/https+websocket的方式进行交互。

网络框架使用Gin框架,日志使用logrus。

ETCD:主要负责集群管理,包括集群节点注册、服务发现。

Redis:主要负责集群数据缓存。

Nginx:主要负责集群节点间的负载均衡。(其实这块一直没有想好,先暂时使用Nginx吧,之后有精力的话,也可仿照etcd的proxy模式实现自己的负载均衡。目前在集群节点扩容时,还需要对应的修改Nginx的配置文件。)

Dean集群:负责业务逻辑实现,之间通过grpc进行通信。

数据库方面使用了gorm,比写sql语句相对省事一些(Ps:学习它使用也费了不少的力气)。

中间遇到的坑

1、ClientV3与grpc冲突的问题

    解决方案:undefined: grpc.SupportPackageIsVersion6 grpc.ClientConnInterface 问题解决_undefined: grpc.clientconninterface_那你就叫我鑫哥吧的博客-CSDN博客

2、跨域问题

    解决方案:后台可以通过编写gin插件实现。具体方法不说了,网上很容易搜到。

总结

通过这个这个项目将之前很多的理论内容进行了实践,实践才是检验真理的唯一标准。不亲自写写代码、部署调试,还真不知道这么多事情在里面啊,程序员真是学无止境啊。

每次想写些内容,写之前总感觉自己有好多要写的内容,可是真的开始写的时候,却发现提笔忘词啊。哎。以后慢慢更新吧。

至于源码之后会逐步的开源到github上(至于怎么上传还没有研究呢。一步一步来吧)

之后工作重点

还是把前端搞搞吧,不然太简陋了,实在拿不出手。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值