Linux服务器开发,redis,memcached,nginx网络组件

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

reator网络编程

epoll被称为事件管理器,利用管理器去管理多个连接。

int clientfd=accept(listenfd,addr,sz);
clientfd ==-1 && erro==EWOLDBLOCK //表示全连接中连接为空
int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
error == EINPROGRESS //正在建立连接
error == EISCONN  //连接建立成功             
  • 关闭读端 read = 0
  • 关闭写端 write = -1 && errno =EPIPE
    EINTR被信号打断了
    EWOULDBLOCK 和EINRT称为正向错误,意思是还可以再读写。
    EINTR被信号打断了
  • io函数像read只能检测一个fd对应的状态,可以检测具体的状态。
  • io多路复用可以检测多个fd对应的状态,只能检测可读,可写,错误,断开笼统等信息。
  • getsockopt 也可以检测错误。

阻塞IO 和 非阻塞IO

  • 阻塞在网络线程
  • 连接的fd阻塞属性决定了io函数是否阻塞
  • 具体差异在:io函数在数据未到达时是否立刻返回。
//默认情况下,fd时阻塞的,设置非阻塞的方法如下:
int flag=fcntl(fd,F_GETFL,0);
fcntl(fd,F_SETFL,flag | O_NONBLOCK)

阻塞IO模型在数据准备阶段和数据拷贝阶段都是阻塞的
在这里插入图片描述
在这里插入图片描述

  • timeout == 0 是非阻塞效果,检测一下立即返回。
  • timeout == -1 是永久阻塞
  • timeout == 1000
    在这里插入图片描述
    在这里插入图片描述
    epoll_create 会去创建红黑树和就绪队列。
    epoll_ctl 会去注册事件,会建立回调关系。当事件被触发,epoll_ctl 会将fd从红黑树中放到就绪队列。

在这里插入图片描述
在这里插入图片描述
问:代码第9行能不能监听写事件?
答:不能,因为刚开始的时候,写缓冲区是空的,会被一直触发可写。

编程细节,返回值以及错误码

在这里插入图片描述
读端关闭了。
在这里插入图片描述
建议read()函数使用非阻塞io,因为出现错误会立刻返回,不会卡在这里影响别人。
在这里插入图片描述
将数据写到缓冲区,协议栈会将数据发送到对端。

redis、nginx、memcached reactor具体使用

在这里插入图片描述
在这里插入图片描述
redis层次结构
redis-6.0支持IO多线程,封装在networking.cz中。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

屯门山鸡叫我小鸡

加油

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值