系统"/>
UDP畅聊系统
文章目录
- 前言
- 一、总体实现流程即及框架
- 1.实现流程
- 2.用户注册和登录
- 3.聊天
- 4.建立不同的实现模块
- 5.实现各个模块之间的串联
- 二、各个模块中的接口及其功能
- 三、最终实现成果
- 总结
前言
畅聊系统对我们来说已经不陌生了,我们在生活中大量使用的像QQ、微信等聊天程序,都是这种畅聊系统的升级。在学过网络编程、多线程这些知识点之后,已经可以实现服务器与客户端之间的通信,但是,畅聊系统是一种多对一的架构,往往会存在多个客户端,实现多个客户端之间进行信息的收发至关重要。实现一个畅聊系统,既可以对知识有所巩固,也能了解畅聊系统的实现过程。
一、总体实现流程即及框架
1.实现流程
总的实现框架如上图。客户端互相进行发送消息之前,首先需要进行用户的注册和登录,其次才能进行消息的收发。在收发消息的过程中,如client1向client2发送消息,消息是先从clinet1到达server,保存在服务器中,通过服务端这个中转站把消息再转发给client2。
2.用户注册和登录
注册流程如下,客户端输入注册所需的信息,如用户昵称,学校,密码等,注册成功之后,服务器会向注册用户返回一个注册ID,就好比是去注册qq号一样,输入信息成功之后回返回一个注册好的qq号。
在登录阶段,需要客户输入注册ID和密码,服务器会将之前用户注册好的ID和密码进行保存,当客户登录时,会对输入的ID和密码进行比对,正确则密码输入成功,错误则登录失败。
3.聊天
具体聊天过程如下图,客户端1(使用UDP协议)发送数据之后,数据是先到达服务端,但服务端并不是立即把数据推送给其他在线用户,而是先通过生产线程将数据发送到后端数据池,然后再通过消费线程将数据发送到服务端接着推送给其他在线用户。在服务端与数据池之间是一个生产者消费者模型。
4.建立不同的实现模块
在具体实现之前,需要理清思路,建立不同的实现模块,每个模块对应不同的功能。
1.登陆注册模块:这个模块主要管理用户的注册和登录,这一过程使用TCP协议进行数据的收发。
2.用户管理模块:用来管理用户的注册与登录(管理用户登录信息以及维护用户在线列表)
3.数据池模块:保存用户发送的数据
4.工具模块:保存各种信息(如保存日志信息等),与所有模块相关联。
5.实现各个模块之间的串联
在Linux操作系统中建立如下头文件以及源文件来保存各个模块之间的信息,我们的任务就是将这些模块通过代码串联起来实现整个程序
1.在Chatserver.hpp中,需要做到的是创建TCP套接字,创建UDP套接字,创建线程(生产者消费者线程与来关联消息池模块),串联用户管理模块(管理登录信息)和消息池模块(使用udp收发的数据存放到消息池中)。
二、各个模块中的接口及其功能
三、最终实现成果
源代码:
总结
实现这样一个UDP畅聊系统,对于巩固网络方面的知识有很大的帮助。通过这样一次经历,我也等的了编写项目时的一个大体的思路:在刚拿到项目无从下手的时候,我们先不用纠结需要怎样去写具体的实现方法,一直这样的话我们就会陷入一个死循环当中越来越没有思路。我们的一个闭环思路应该是,先着手去想一想为了实现这个目标我们需要提供哪些接口,在编写这些接口的过程中需要哪些成员变量,再根据自己的需求去添加成员变量即可,最终一步一步完成目标。
更多推荐
UDP畅聊系统
发布评论