后端开发【一大波有用知识】—Redis,Memcached,Nginx网络组件
时间:2022-10-24 23:00:06
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

-
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);
-
timeout == 0 是非阻塞效果,检测后立即返回。
-
timeout == -1 是永久阻塞
-
timeout == 1000
C 开发学习地址:C/C Linux服务器开发高级架构师/Linux后台架构师
想学习C 工程、高性能、分布式、简单。性能调优、TCP,协程,Nginx源码分析Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,Linux内核,P2P,K8S,Docker,TCP/IP,协程,DPDK 如有必要,可点击以下视频学习资料:C 架构师学习资料 进去自取
epoll_create 会去创建红黑树和就绪队列。
epoll_ctl 会注册事件,建立回调关系。当事件被触发时,epoll_ctl 会将fd从红黑树到就绪队列。
问:代码第9行能监控写事件吗?
答:不,因为一开始写缓冲区是空的,总会触发可写。
编程细节、返回值和错误代码
读端关闭。
建议read()函数使用非阻塞io,因为错误会马上回来,不会卡在这里影响别人。
将数据写入缓冲区,协议栈将数据发送到对端。
redis、nginx、memcached reactor具体使用
redis-6.0支持IO多线程,包装在networking.cz中。
参考资料
推荐零声学院免费公开课,个人认为老师讲得好,和大家分享:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习