【项目介绍】IM聊天室

IM你可能没听过,但是网页版的微信你一定不会陌生吧?其实网页版微信就是IM中的一种形式。
这里的IM 是 Instant Message 就是一个允许多人通过网络进行即时通讯的终端服务器, 它是目前Internet 上最为流行的通讯方式,在本次项目中我主要使用websocket和mongoose框架进行编写网页版的群聊即时通信工具。其中我通过HTTP协议升级到websocket协议 从而实现服务器与客户端的全双工双向通信;使用mongoose框架为websocket实现事件驱动型的非阻塞 api;除此之外我还用到cookie和session 记录用户在网页上的信息,并涉及一点前端网页的交互式应用技术。

项目简介

这是一个通过使用http/websocket协议+mongoose框架+session和cookie+MySQL 数据库+jsoncpp的技术构成,在Linux下用C++编写的网页版群聊即时通信工具。 功能与网页版的微信相似,只要注册过就可以进行登陆和群聊功能。
PS:目前只能进行文字交流,传输语音,图片等功能有待开发。

项目技术点

  • C++ 11 STL
  • http / websocket 协议
  • session 和 cookie 的理解
  • MySQL C Connect 数据库连接
  • session 管理登陆注册信息
  • mongoose 框架的理解
  • jsoncpp

项目演示

在这里插入图片描述
在这里插入图片描述

项目开发

1. 理解mongoose框架
struct mg_mgr - - 事件管理器

//关于事件管理器,我们只要知道它是将所有mg_connection使用链表链接起来即可
struct mg_mgr {
struct mg_connection *active_connections;//可以理解成链表头部

};

struct mg_connection - - 由双链表组织的连接

struct mg_connection {
struct mg_connection *next, prev; / 双链表组织所有链接 */
struct mg_connection listener; / 指向监听链接 */
struct mg_mgr mgr; / 指向事件管理器,可以理解成指向链表头部 /
sock_t sock; /
封装的该链接对应的socket /

struct mbuf recv_mbuf; /
链接的接收缓冲区 /
struct mbuf send_mbuf; /
链接的发送缓冲区 /
double ev_timer_time; /
链接的相关时间事件,后面会使用 /
mg_event_handler_t handler; /
链接事件发生之后对应的回调函数 */
void user_data; / 用户数据 */
unsigned long flags; //链接特性
}

struct websocket_message - - 报文消息
struct mg_str - - mongoose风格的字符串.
mongoonse事件 - - 该框架使用的是select多路复用进行检测事件

2. 设计ImServer中的相关类

和session有关操作:
在这里插入图片描述
和数据库有关操作:
在这里插入图片描述
服务器操作:
在这里插入图片描述
3. 调用服务器的逻辑

#include"IMServer.hpp"
using namespace std;

int main()
{
ImServer *im=new ImServer();
im->InitServer();
im->StartServer();
  return 0;
}

4. Makefile 文件
在这里插入图片描述

完整项目代码

项目的完整代码参照GitHub:https://github.com/girl-6/Project-IM
关于项目的测试内容参照博客:项目测试

猜你喜欢

转载自blog.csdn.net/ly_6699/article/details/99205464