多路复用:从文字上理解,就是很多条路,我要复用一个什么东西。
解决的问题:app端 1.要接收 很多个客户端,
2.每个客户端是否有数据到达
暴力解: app遍历所有客户端 如果你有1000,或者1万个客户端就尴尬了。
优化解: 多路复用器
服务器就只看 多路复用器,告诉我那个客户端有数据。
客户端其实连在的是内核上,内核告诉app哪个客户端有数,app再去访问客户端。
过程就是三步1.客户端到达内核kernel
2.内核告诉app哪个客户端有数据
3.app去访问客户端
多路复用器:只是事件传递,不传数据。
conn的处理是无序的,就是app先处理conn1 还是处理conn2是无序的,
但每个conn里的处理是有序的。
借鉴了网上的一些代码,用python实现一个简单的redis服务。使用方法如下:源码详见附件。
使用方法:1.导入模块:import socket
import select
2.创建 epoll=select.epoll()
3.注册事件
epoll.register(fd,eventmask)
4.将创建的套接字添加到epoll的事件监听中
epoll.register(s.fileno(),select.EPOLLIN|select.EPOLLET) 事件 输入和输出
5.while True:
epoll list=epoll.poll()
#对事件进行判断
6.向epoll中注册连接SOCKET的可读事件
epoll.register(conn.fileno(),select EPOLLIN|select Eelif events==select EPOLLIN:)
从激活fd上接收