欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

实现项目框架

程序员文章站 2022-04-16 09:44:33
项目名:基于linux下的高性能负载均衡聊天服务器。 2018 年 1 月 15 日开始做这个项目,现在是1 月 27 号 已经把基础功能先大概实现了,由于是我的第一个项目,接下来会好好记录一下。后续会往里面陆续地加入东西,以及压力测试等,同时也是为3月的春招做准备。 首先需要使用socket编程, ......

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