轻量级网络协议库
负责IO事件的执行
, 每个线程都有一个Eventloop, 由Acceptor
的newConnection函数
进行负载均衡. 在loop()函数中通过调用poller_的poll()
函数来获取就绪事件并保存到activeChannels
,然后遍历activeChannels并执行它的handleEvent()函数
Eventloop的成员,使用epoll
来负责具体的IO多路复用. 并且提供将Channel加入到epoll监听队列等功能.
以fd为核心的包装类, 提供handleRead等回调函数
, 是Eventloop和TcpConnection沟通的桥梁
. TcpConnection通过调用其handleEvent()
来执行IO操作.
逻辑上的socket连接, 每一个socket都对应着一个TcpConnection, 它通过回调函数
来完成业务逻辑的实现. 因为Server保存的shared_ptr, 所以TcpConnection的生存周期
由用户来决定.
接收socket连接的类, 在接收到一个连接之后, 调用newConnection来创建一个TcpConnection(或重用). 采用轮换
的思想将其绑定在某一个EventloopThread上, 以此来完成多工作线程负载均衡
.
负责着整个服务器的启动和终止, 并在此注册回调函数.
提供回调函数来实现业务逻辑
-
ConnectionStatusCallBack
状态更改回调函数
当连接的socket状态更改时,会执行此回调函数
-
ClosingCallBack
socket关闭回调函数
当socket即将关闭时, 会执行次回调函数, 可以用于进行注销用户等功能
-
ReadCompleteCallBack
读结束回调函数
当读完Socket的数据之后, 会执行此回调函数, 可以用于处理数据等功能
-
WriteCompleteCallBack
写结束回调函数
当服务器给socket写完数据之后, 会执行此回调函数, 可以用于记录发送数据日志等功能
-
ErrorCallBack
出错回调函数
当出现错误时, 会执行此回调函数, 默认忽略, 如有需要, 可以记录出错信息
使用make可以生成用例
Concurrency Level: 20
Time taken for tests: 3.339 seconds
Complete requests: 100000
Failed requests: 0
Requests per second: 29953.30 [#/sec] (mean)
Time per request: 0.033 [ms] (mean, across all concurrent requests)
Device: MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
System: 4.15.0-30deepin-generic
Time: 2019/12/01