XIAJIUFAN / chatserver

可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码(基于muduo库实现)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

chatserver

可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码(基于muduo库实现)

技术栈

  • c++11
  • muduo网络库
  • 基于发布-订阅的redis消息队列

项目需求

项目目标

项目结构介绍

遇到的问题

  • 客户端注销登录问题
    • 描述:用户登录后,注销账号在进行登录,主线程可能发生阻塞(问题代码:src/client/client.cpp)
    • 分析定位:原代码在登录后启动子线程,作为接收线程,但是登录响应处理逻辑是由主线程负责的,当用户注销后,子线程没有结束,用户再次进行登录时,主线程和子线程竞争clientfd资源,子线程占到资源,但是没有提供登录响应处理逻辑
    • 解决
      • 在客户端和服务端连接成功后就创建子线程,作为接收线程,专门处理服务器端的响应(也包括登录响应、注册响应);
      • 加入信号量机制,在登录和注册时,子线程处理完成后,通过信号量,通知阻塞在信号量的主线程继续执行;
      • 考虑到登录成功和失败的时候,显示界面不同(主线程执行不同的代码),并且登录响应业务逻辑由子线程负责,所以添加一个原子类型的全局变量,在多线程环境下(主线程,接收线程)保证线程安全的同时,作为是否登录成功的判断依据。

TodoLists

  • 好友列表显示问题
  • 好友/群组成员上限通知
  • 添加好友时,发送通知

项目运行

开发环境配置

  • muduo网络库编译安装
  • nginx tcp负载均衡配置
  • redis环境安装

编译方式

cd build
rm -rf *
cmake ..
make

About

可以工作在nginx tcp负载均衡环境中的集群聊天服务器和客户端源码(基于muduo库实现)


Languages

Language:C++ 99.8%Language:CMake 0.2%Language:Shell 0.0%