项目名:基于linux下的高性能负载均衡聊天服务器。
2018 年 1 月 15 日开始做这个项目,现在是1 月 27 号 已经把基础功能先大概实现了,由于是我的第一个项目,接下来会好好记录一下。后续会往里面陆续地加入东西,以及压力测试等,同时也是为3月的春招做准备。
首先需要使用socket编程,实现客户端和服务器端的信息交互,前期实现的功能有5个:注册,登陆,退出,1对1聊天,1对多聊天。
服务器端接收处理数据,以及与客户端交流的大概架构
服务器端:首先确定使用多线程来处理客户端请求,主线程发送accept的值将接收的客户端套接字发给支线程,之后全权交给支线程去处理,主线程继续去接收。
相应的支线程发送自己监听套接字的压力值,方便主线程下一次选择压力最小的支线程。
支线程监听套接字后recv,处理完成后给客户回复结果,如:登陆成功等。
客户端:主线程不断接受命令,解析后处理,向服务器端发送数据。支线程在程序开始时开始执行,监听服务器端发送的数据。
- 对于主线程和支线程之间的通信选择sockpair,主线程保存0端,支线程保存1端。
- 对于搜索,使用了STL中的map
- 使用MVC设计模式,每个线程都有一个控制台,数据解析后去寻找相应的视图,进行处理。
- 对于监听套接字,使用了libevent库,之后有时间了去剖剖源码。
- 对于数据的打包,解析,使用了json
-
用户的数据使用mysql存储。
mysql中创建了三张表:Usr('name','password'),Online('name','cli_fd'),Offline('name','message'); 还有一些细节实现,登陆时如果已经在线则将原来的顶掉,并发送一个异地登陆。 如果对方不在线时发送消息,加入到离线消息,在对方上线时提醒。
现在主要完成了服务器端的代码,实现了登陆 注册 退出 1对1聊天,可以跑起来了,但是客户端的细节很粗糙,更像是mail聊天,如果有时间的话可以弄一弄。