1.原理
-
客户端从标准输入读取数据,将数据序列化后发送至网络;
-
服务器端使用多线程+生产者消费者模型
-
生产者从网络中读取数据,并将读取到的用户信息添加至用户列表中,将数据放至数据池中;
-
消费者从数据池读取数据,并广播给所有在用户列表中的用户;
-
-
数据经过网络以后,反序列化再次发给客户端,实现群聊功能;
2.所用技术
平台: CentOS 7, 64位操作系统
语言: C/C++
编译工具: g++
序列化反序列化工具: jsoncpp
窗口设计框架: nucrse/ncurses
其他: 生产者消费者模型、信号量互斥机制、多线程编程、socket套接字编程
3.系统框架
server模块: 收到用户发送的字符串以后, 将用户信息存储到在线用户表中,将数据存储到数据池中, 再将数据广播给所有在线用户;
client模块: 从标准输入读取用户数据,并且将字符串序列化,发送给服务器; 接收到服务器的数据以后,反序列化,输出到output框;
data_pool模块: 数据池,存放用户发过来的诗句,是一个环形队列描述的;
window模块: 显示用户界面,使用ncurses库实现;