1。框架介绍
http://iunknown.javaeye.com/blog/59804
2。源码分析
下文源码分析基于最新源码0.9.5,下载地址http://code.google.com/p/spserver/downloads/list
3。主程序
SP_Server的调用链条是runForever()->eventLoop()->start()
start()中有如下方法
acceptArg.mEventArg = &eventArg;
acceptArg.mHandlerFactory = mHandlerFactory;
acceptArg.mIOChannelFactory = mIOChannelFactory;
acceptArg.mReqQueueSize = mReqQueueSize;
acceptArg.mMaxConnections = mMaxConnections;
acceptArg.mRefusedMsg = mRefusedMsg;
struct event evAccept;
event_set( &evAccept, listenFD, EV_READ|EV_PERSIST,
SP_EventCallback::onAccept, &acceptArg );
event_base_set( eventArg.getEventBase(), &evAccept );
event_add( &evAccept, NULL );
结合libevent我们可以看出,这里是将服务器的socket(listenFD)和EV_READ事件注册到libevent当中
当有客户端连入时,去找SP_EventCallback::onAccept去处理
转入到SP_EventCallback::onAccept 当中,可以注意到如下关键代码