void onConnection(const TcpConnectionPtr& conn)
将新连接connfd设置为TCP_NODELAY属性。
作用:TCP/IP协议默认开启了Nagle算法,该算法通过减少需要传输的数据包来优化网络。在内核实现中,数据包的发送和接收会先做缓存,分别对应于写缓存和读缓存。
对于关闭TCP_NODELAY,则是应用了Nagle算法。数据只有在写缓存中累积到一定量之后,才会被发送出去,这样明显提高了网络利用率(实际传输数据payload与协议头的比例大大提高)。但是这又不可避免地增加了延时;与TCP delayed ack这个特性结合,这个问题会更加显著,延时基本在40ms左右。当然这个问题只有在连续进行两次写操作的时候,才会暴露出来。
void onMessage(const TcpConnectionPtr& conn, Buffer buf, Timestamp)*
收到了数据,直接将数据发送。
int main(int argc, char argv[])*
设置Logger::setLogLevel(Logger::WARN);
只有日志级别大于WARN的才会被输出。
EventLoop loop; 初始化单线程的loop
TcpServer server(&loop, listenAddr, “PingPong”); 初始化服务器,默认单线程
server.setConnectionCallback(onConnection);
server.setMessageCallback(onMessage);设置回调函数
server.start();
loop.loop();启动
timeout = -100 :应该是程序运行多久
bufsize: 每次读取多少字节
nothreads:表示是单线程程序
taskset -c 1 ./pingpong_server 0.0.0.0 55555 $nothreads $bufsize & srvpid=$!
taskset 命令可将某个进程与某个CPU核心绑定,使得其仅在与之绑定的CPU核心上运行。