muduo库的学习9---TcpServer与TcpClient的基本设计---TcpConnection成员

TcpConnection是muduo库里面最复杂的类。

其复杂性来自于TCP连接固有的复杂性,包括连接建立、连接断开、数据发送、数据接收。

后面的章节会针对这4个内容详细讲解。


1.类的结构

class TcpConnection 
{
/*********************Function Member************************************/

//write and read
  void send(Buffer* message);  
  void startRead();
  void stopRead();
  void handleRead(Timestamp receiveTime);
  void handleWrite();
 
//set callbacks
  void setConnectionCallback(const ConnectionCallback& cb)
  void setMessageCallback(const MessageCallback& cb)
  void setWriteCompleteCallback(const WriteCompleteCallback& cb)
  void setHighWaterMarkCallback(const HighWaterMarkCallback& cb, size_t highWaterMark)
  void setCloseCallback(const CloseCallback& cb)


//control connection establish and destroy 
  void connectEstablished();   
  void connectDestroyed();  
  void handleClose();

/**********************Data Member**************************************/  
  enum StateE { kDisconnected, kConnecting, kConnected, kDisconnecting };

//genearl  
  const string name;
  StateE state;  
 
//loop
  EventLoop* loop;  
  boost::scoped_ptr<Socket> socket;
  boost::scoped_ptr<Channel> channel;

  ConnectionCallback connectionCallback;
  MessageCallback messageCallback;
  WriteCompleteCallback writeCompleteCallback;
  HighWaterMarkCallback highWaterMarkCallback;
  CloseCallback closeCallback;
  
//buffer
  Buffer inputBuffer;
  Buffer outputBuffer; 
  
};

2.数据成员

(1)general

表示名字和状态

(2)loop

常用的loop、socket、channel什么的

然后就是一些channel的callback函数

(3)buffer

用于读写的数据结构

3.函数成员

(1)write and read

都要进行相应地判断。

比如发送,如果当前没有在发送并且发送缓冲区也是空的,就可以调用write函数直接发送。

如果发送缓冲区有数据,这将现在需要发送的数据放入发送缓冲区。

更详细的讲解后面会有。

(2)callbacks

这个没什么好说的,在TcpConnection建立之后会传进来各种callback

这里需要特别注意的就是为了防止发送数据速度大于对端接收缓冲区速度的应对办法

采用HighWaterMarkCallback

(3)connection establish and destroy

这个后面也会详细讲解。

复杂性就来自于本身回调过程的复杂以及本身connection断开的复杂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值