666-集群聊天服务器项目总结
Posted -林泽宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了666-集群聊天服务器项目总结相关的知识,希望对你有一定的参考价值。
集群聊天服务器项目总结
首先,我是在Linux下使用VScode进行项目的开发,通过Cmake构建项目,使用gdb进行项目问题的调试,项目完成后通过Linux shell输出项目编译脚本,并把项目托管到我的GitHub上。
这个项目分为4个模块,首先,第一个模块是网络模块,我通过深入剖析muduo网络库的核心组件,采用C++11重写muduo库的核心组件,将依赖于boost库的技术点转化为C++11的知识点,使其脱离boost库,实现出一套网络库来使用,使用这个网络库的好处是:解耦了网络模块的代码和业务层的代码,能够让开发者专注于业务层的开发。然后第二个模块是业务模块,也就是是服务层,我使用了C++11的一些技术,比如说,map,绑定器,函数对象,做了一个消息id和这个消息发生以后的回调操作的绑定,相当于是做了一个回调机制,当这个网络I/O给服务器通知有消息请求,服务器处理客户注册的读事件的回调操作(OnMessage),通过消息请求,从消息里面(buffer)解析出这个json,得到消息id,通过回调操作,就可以处理这个消息了。第三个是数据存储层,我使用的是mysql,对于项目的关键的数据进行存储,比如说,用户的id,离线消息,好友列表,群组列表的关系,都是在MySQL存储。我还通过实现一个MySQL数据库连接池,在项目代码上还通过书写model类对业务层封装底层数据库,提高MySQL数据库的访问效率。
在单机模式下,主要就是这3个模块,但是单机的并发能力是有限的,所以,我考虑项目的整体的并发能力,让项目可以支持多机的扩展,部署多台网络服务器,前面需要挂1个nginx负载均衡,这个项目是基于TCP的私有协议,自己去搭建的基于C/S模型的通信,所以我通过对Nginx的tcp的负载均衡配置,做一个长连接,因为是消息聊天通信,客户端不仅仅要给服务器主动发消息,而且服务器还要主动给客户端推消息,所以必须是长连接,短连接做不到这个功能,因为短连接没有办法给客户端推消息,另外,在负载均衡里面,因为是各个服务器有不同的人进行注册,不同服务器上注册的用户需要进行通信的话,我在这里引入了Redis作为一个MQ消息队列的功能,利用它的发布订阅功能实现了跨服务器的消息通信功能。
以上是关于666-集群聊天服务器项目总结的主要内容,如果未能解决你的问题,请参考以下文章