使用Python模块中的select模块实现web聊天室功能
select模块
Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqueue方法(freeBSD系统)
参数: 可接受四个参数(前三个必须)
rlist: wait until ready for reading
wlist: wait until ready for writing
xlist: wait for an “exceptional condition”
timeout: 超时时间
select方法:
每次调用slect都要将所有的fd拷贝到内核空间(每次都要拷贝),导致效率下降
每次调用slect都要将所有的fd拷贝到内核空间(每次都要拷贝),导致效率下降
监听的的实现是通过遍历所有的fd,(遍历消耗的时间消耗多)判断是否有数据访问
最大连接数(input中放的文件描述符数量1024)
pull方法:
最大连接数没有限制了,除此之外和select一样。使用较少
epull方法:
内部通过3个函数实现(select是其中一个)
第一个函数:
创建epoll句柄,把所有的fd拷贝到内核空间,只需要拷贝一次
第二个函数: 回调函数
某一个函数或者动作成功完成后,会自动触发一个函数为所有的fd绑定一个回调函数,一旦有数据访问,触发改回调函数,回调函数把fd放到链表中。(只要有活动,把fd放到链表中