当前位置: 首页 > 工具软件 > SPServer > 使用案例 >

SPServer源码分析(四): 核心服务器类SP_Server分析

孟子墨
2023-12-01

1。进入SP_Server的runForever函数,该函数最终转入start()函数执行

 

 

2。start函数是主要执行函数

函数内部使用了libevent.有关libevent编程参考官方主页。

 

函数内部涉及重要的类有:

SP_Executor(任务执行者,内部封装线程池)

 

 

 

L160初始化服务器监听,188-192初始化事件,194初始化任务执行者workerExecutor

 

这里使用了半同步、半异步模式。

 

event_base_loop( eventArg.getEventBase(), EVLOOP_ONCE );运行在主线程当中,借助libevent的抓取TCP异步事件。

 

class SP_EventCallback {
public:
 static void onAccept( int fd, short events, void * arg ); //处理客户端连接事件
 static void onRead( int fd, short events, void * arg );   //处理客户端读数据事件
 static void onWrite( int fd, short events, void * arg );  //处理客户端写数据事件

 static void onResponse( void * queueData, void * arg );

 static void addEvent( SP_Session * session, short events, int fd );

...}

 

SP_EventCallback处理各种事件,将对应的后续处理函数入队。由任务执行者对象出队,交给线程池去执行。

 

class SP_EventHelper {
public:
 static void doStart( SP_Session * session ); //对应onAccept事件
 static void start( void * arg );

 static void doError( SP_Session * session ); //对应onRead和onWrite中的错误处理流程
 static void error( void * arg );

 static void doTimeout( SP_Session * session ); //对应onRead和onWrite中的超时处理流程
 static void timeout( void * arg );

 static void doClose( SP_Session * session ); //对应onWrite的正常关闭处理流程
 static void myclose( void * arg );

 static void doCompletion( SP_EventArg * eventArg, SP_Message * msg ); //对应onResponse中的完成处理流程

...

}

 

该类当中doXXX函数最用是配合事件处理函数将XXX函数入队。XXX函数是由线程去真正地执行

 类似资料: