基于muduo和nginx的聊天服务器项目总览

项目需求

  1. 客户端新用户注册
  2. 客户端用户登录
  3. 添加好友和添加群组
  4. 好友聊天
  5. 群组聊天
  6. 离线消息
  7. nginx配置tcp负载均衡
  8. 集群聊天系统支持客户端跨服务器通信

项目用到的技术

json

Json是一种轻量级的数据交换格式(也叫数据序列化方式)。Json采用完全独立于编程语言的文本格式来存储和表示数据。也就是说,客户端如果是C++写的,服务器是Java写的,没关系,大家都认识Json,你想把数据发给我,你就把数据序列化成Json字符串,我收到Json字符串时,就把Json字符串反序列化成我这个主机所用的语言能认识的消息体。

JSON for Modern C++ 是一个由德国大牛 nlohmann 编写的在 C++11标准下使用的 JSON 库。JSON for Modern C++这个三方库的使用非常简单,如下所示:

#include "json.hpp"
using json = nlohmann::json;

muduo网络库

muduo网络库的特点:one loop per thread,一个线程一个事件循环。有一个main reactor负载accept连接,然后把连接分发到某个sub reactor(采用round-robin(轮询)的方式来选择sub reactor),该连接的所用操作都在那个sub reactor所处的线程中完成。多个连接可能被分派到多个线程中,以充分利用CPU。Reactor poll的大小是固定的,根据CPU的数目确定。读写操作都在epoll上完成。

nginx

单台服务器受限于硬件资源,其性能是有上限的,当单台服务器不能满足应用场景的并发需求量时,就需要考虑部署多个服务器共同处理客户端的并发请求,但是客户端怎么知道去连接具体哪台服务器呢?此时就需要一台负载均衡器,通过预设的负载算法,指导客户端连接服务器。nginx可以作为一台负载均衡器,其支持tcp的长连接负载均衡。

redis

要使得登陆在不同服务器上的客户可以相互通信,最好的方式就是引入中间件消息队列,解耦各个服务器,使整个系统松耦合,提高服务器的响应能力。

在集群分布式环境中,经常使用的中间件消息队列有ActiveMQ、RabbitMQ、Kafka等,都是应用场景广泛并且性能很好的消息队列,供集群服务器之间,分布式服务之间进行消息通信。限于我们的项目业务类型并不是非常复杂,对并发请求量也没有太高的要求,因此我们的中间件消息队列选型的是-基于发布-订阅模式的redis。

redis支持多种不同的客户端编程语言,C++对应的则是hiredis。

MySQL

使用MySQL存储各个用户以及群组的信息。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值