12 TCP套接字之IO分离


前面通过信号捕捉也没有完美的解决客服端阻塞的问题, 那么本节我们通过将客服端的IO操作分离的办法来解决这个困惑我们很久的bug吧.


IO分离

第一次听到 IO分离 肯定会感觉很陌生, 不急, 下面我会解释的.

IO分离实际是将 read逻辑操作(也就是读操作) 和 write逻辑操作(也就是写操作) 的实现分离开. 分离技术有多种, 本节也仅仅介绍一种简单.


疑惑

SIGPIPE信号中我们分析到阻塞的原因是出现在 read 函数, 那么如果我们能在 write 返回为0直接退出客服端程序不就可以避免阻塞了吗?

本节就将实现客服端的IO分离. 但既然可以在 write 返回0直接调用 exit 退出程序为什么还要做IO分离呢? 将IO分离有优势.

  • 传统的回声客服端 : 将数据发送给客服端之后下一步无条件的等待对端将数据发送过来再执行下一批的传送.

在这里插入图片描述

  • IO分离 : 客服端发送数据不必考虑接收数据的情况, 因此可以连续的发送数据, 提高传输效率. 这在网速慢的情况下尤为明显.

在这里插入图片描述


IO分离实现

IO分离的实现其实可以直接采用fork就行了. 一个进程只负责向套接字中写数据, 一个进程负责从套接字中读数据.

这里将修改过后服务端的代码粘贴出来.

void Write(int sockfd){
    // 写操作
    int len;
    char buf[1024];

    while(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值