- 博客(9)
- 资源 (4)
- 收藏
- 关注
原创 复合&继承关系下的构造和析构
继承关系下的构造和析构看一下测试代码:/* * @filename: Inheritance.cpp * @author: Tanswer * @date: 2018年01月31日 14:59:28 * @description: 测试继承关系下的构造和析构 */#includeusing namespace std;class Base
2018-01-31 16:25:55 766 1
原创 编写网络服务程序的常用编程模型
今天大概总结一下编写服务端程序常用的编程模型。参考UNP第三版第三十章和陈硕的muduo那本书,强烈建议仔细阅读。注意以下代码只是为了显式框架或者说编程模型,不是完整的程序,深夜写的比较任性,不要见怪。accept + read/write这个不是并发服务器,而是迭代服务器(iterative server)。 它一次服务一个客户。不适合长连接,适合 daytime 这种 write-
2018-01-25 02:32:20 1143 1
原创 Muduo网络库源码分析之TcpConnection Class
用于管理一个具体的 TCP 连接,比如消息的接收与发送,完成用户指定的连接回调 connectionCallback。TcpConnection 构造时接收参数有 TCP 连接的 sockfd,服务端地址 localAddr,客户端地址 peerAddr,并通过 Socket 封装 sockfd。并用 Channel 管理该 sockfd,向 Channel 注册可读、可写、关闭、出错回调函数
2018-01-17 15:04:45 871
原创 Muduo网络库源码分析之Acceptor和TcpServer
Acceptor用于 accept 一个 TCP 连接,accept 接受成功后通知 TCP 连接的使用者。Acceptor 主要是供 TcpServer 使用的,其生命期由后者控制。一个 Acceptor 相当于持有服务端的一个 socket 描述符,该 socket 可以 accept 多个 TCP 客户连接,这个 accept 操作就是 Acceptor 实现的。这里用到了一些封装好
2018-01-12 22:43:03 1016
原创 C++智能指针的分析与使用
手动管理的弊端在简单的程序中,我们不大可能忘记释放 new 出来的指针,但是随着程序规模的增大,我们忘了 delete 的概率也随之增大。在 C++ 中 new 出来的指针,赋值意味着引用的传递,当赋值运算符同时展现出“值拷贝”和“引用传递”两种截然不同的语义时,就很容易导致“内存泄漏”。手动管理内存带来的更严重的问题是,内存究竟要由谁来分配和释放呢?指针的赋值将同一对象的引用散播到程序各
2018-01-11 23:39:30 3362 3
原创 Muduo网络库源码分析之对socket及其相关操作的封装
主要涉及到的类和实现文件有:Endian.h 提供了字节序转换的函数。Socket.h/Socket.cc socketfd 的封装,提供了绑定地址、开始listen、接受连接等操作,并可设置套接字选项。InetAddress.h/InetAddress.cc 套接字地址的封装,提供了多种方式初始化一个地址,还提供方法从地址中拿到 ip 和 port。SocketsOps.h/
2018-01-09 15:14:11 1285
原创 eventfd 的分析与具体例子
eventfd 介绍Linux 2.6.27后添加了一个新的特性,就是eventfd,是用来实现多进程或多线程的之间的事件通知的。接口#include int eventfd(unsigned int initval, int flags);这个函数会创建一个事件对象(eventfd object),返回一个文件描述符,用来实现进程或线程间的等待/通知(wait/notify
2018-01-08 23:22:55 6632 1
原创 Muduo网络库源码分析之定时器的实现
muduo 的定时器功能由三个 class 实现,TimerId、Timer 和 TimerQueue。TimerId 类它唯一标识一个 Timer 定时器。TimerId Class 同时保存Timer* 和 sequence_,这个 sequence_ 是每个 Timer 对象有一个全局递增的序列号 int64_t sequence_,用原子计数器(AtomicInt64)生成。
2018-01-07 15:41:05 1262
原创 Muduo网络库源码分析之Reactor模式的关键结构
本文分析一下Reactor模式的实现,关键是三个类:Channel、Poller、EventLoop。事件分发类 ChannelChannel 是 selectable IO channel,负责注册与响应IO事件,包括注册给Poller的 fd 及其监听的事件,以及事件发生了所调的回调函数。 每个Channel对象自始至终只负责一个 fd 的事件分发,封装了一系列该 fd 对应的操
2018-01-06 18:36:02 1448 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人