我们在在一个主线程进行创建监听套接字,创建线程个数个双向管道(用双向管道因为消息发送是全双工的),创建cpu内核个数-1个子线程,利用libevent监听监听套接字和双向管道的一端,接受客户端连接,为客户端选择处理消息的子线程。
在子线程中,我们分别创建三个子线程来分别完成相应的功能。子线程1负责通过sock_pair双向管道进行与主线程的信息交换,用同一个套接字cli_fd可以让用户选择不同模式,这里使用mvc模式控制,使用的是map表,control控制台。
子线程2用 libevent框架,其中双向管道读取主线程发送的客户端fd,绑定客户端fd处理函数,并给主线程回复当前监听个数。
子线程3用户首次登陆就将用户加入到memeached之中,在规定时间内如果再次登陆就可以在memached中的缓存数据进行查找验证,如果查找不到再进入数据库查找。
主线程代码:
pthread.h
#ifndef PTHREAD_H
#define PTHREAD_H
#include
#include
pthread.cpp
#include
#include
#include
//#include"control.h"
#include"view.h"
#include"pthread.h"
#include
#include
#include
#include
#include
tcpsever.h
#ifndef TCPSEVER_H
#define TCPSEVER_H
#include
tcpsever.cpp
#include
#include
#include
#include
#include
#include
control.h
#ifndef CONTROL_H
#define CONTROL_H
#include "view.h"
#include
#include
control.cpp
#include"exit.h"
#include"talk_to_one.h"
#include"list.h"
#include "register.h"
#include "login.h"
#include "public.h"
#include "control.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include