实现项目框架

项目名:基于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聊天,如果有时间的话可以弄一弄。

原文地址:https://www.cnblogs.com/zhangtiezi/p/8367143.html