捋一下阻塞非阻塞,同步异步概念
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态
- 阻塞:当前进程调用结果未返回,进程等待
- 非阻塞:当前进程调用结果未返回,进程不等待
同步和异步关注的是消息通信机制
- 异步:主动请求数据后便可以继续处理其他任务,等待IO操作完毕的通知(一般有调用特殊接口)
- 同步:指主动请求并等待IO操作完毕,当数据就绪后等待读写完毕再返回
构建一个epoll多路复用的server所需的基本步骤
- 先构造一个套接字服务器,绑定到指定ip端口。
- 设置套接字为非阻塞模式 setblocking(0)。
- 设定TCP_NODELAY选项,可以让服务器无缓冲就可以直接交换数据。
- 创建一个select.epoll()实例,把套接字的文件描述符传递给epoll实例,以便监控
- run方法监听套接字事件,EPOLLIN(读事件), EPOLLOUT(写事件),EPOLLHUP(异常中断)
套接字的响应设置为SERVER_RES
import socket
import select
EOL1 = b'\n\n'
EOL2 = b'\n\r\n'
SERVER_RES = b"""HTTP/1.1 200 OK\r\nDate: Mon, 1 Apr 2016 23:00:01
GMT\r\nContent-Type: text/plain\r\nContent-Length: 25\r\n\r\n
Hello from epoll server!"""
&