1、静态服务器
Html_socket= socket.socket(socket.AF-INET,socket.STREAM)
Html_socket.bind((ip-address,ip-port))
Html_socket.listen(允许最大用户数)
New_socket,client_info = html_socket.accept()
Recv_meg= new_socket.recv(接收数据长度)
New_socket.send(发送信息变量.encoding(“utf-8”))
2、Web静态服务器-1-显示固定的页面
response_headers= ”HTTP/1.1 200 ok\r\n”
response_headers+= “\r\n”
response_body+= “
new_socket.send(response.encode(“utf-8”))
3、Web静态服务器-2-显示需要的页面:利用正则表达式,匹配出.html/index.html文件名
4、Web静态服务器-3-多进程:multiprocing.Proccess
5、Web静态服务器-4-多线程:threading.Tread
6、Web静态服务器-5-协程:gevent.spawn
7、Web静态服务器-6-非堵塞模式(设置html_socket和new_socket为非阻塞)
(1) Html_socket.setblocking(False);
(2)New_socket.settblocking(False);
(3)定义一个new_socket套接字列表,然后调用添加,关闭移除。
8、Web静态服务器-7-epoll
(1)I/O 多路复用的特点:通过一种机制使一个进程能同时等待多个文件描述符,而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,epoll()函数就可以返回。 所以, IO多路复用,本质上不会有并发的功能,因为任何时候还是只有一个进程或线程进行工作,它之所以能提高效率是因为select\epoll 把进来的socket放到他们的 '监视' 列表里面,当任何socket有可读可写数据立马处理,那如果select\epoll 手里同时检测着很多socket, 一有动静马上返回给进程处理,总比一个一个socket过来,阻塞等待,处理高效率。
(2)我们可以结合IO多路复用和多进程/多线程 来高性能并发,IO复用负责提高接受socket的通知效率,收到请求后,交给进程池/线程池来处理逻辑。
(3)epoll对文件描述符的操作有两种模式:LT(level trigger)和ET(edgetrigger)。
(4)LT模式是默认模式,LT模式与ET模式的区别如下:
LT模式:当epoll检测到描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件。下次调用epoll时,会再次响应应用程序并通知此事件。
ET模式:当epoll检测到描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。如果不处理,下次调用epoll时,不会再次响应应。