非阻塞套接字到底带来了什么?
非阻塞套接字在accept或recv的时候不会发生阻塞,要么成功,
要么失败抛出BlockingIOError异常
使用非阻塞套接字实现并发
>并发是什么?
在一个时间段,完成某件事
整体思路
> 吃满 CPU!
> 宁可用 While True,也不要阻塞发呆!
> 只要资源没到,就先做其别的事!
> 将代码顺序重排,避开阻塞!
非阻塞套接字如何实现并发服务端?
配合try语句,将代码顺序重排,避开阻塞
# 第一层循环只负责生成对等连接套接字
>>>While True :
# 保留已经生成的对等连接套接字
>>>connection_list.append(conn)
# 把已经生成的对等连接套接字都处理一遍
>>>for connection in connection_list:
# 成功处理完一个对等连接套接字,就移出一个
>>>connection_list.remove(connection)
>普通套接字实现的服务端有什么缺陷吗?
有,一次只能服务一个客户端!
>这种缺陷是如何造成的?
accept阻塞:当没有套接字连接请求过来的时候会一直等待着
recv阻塞:当连接的这个客户端没有发数据过来的时候,也会一直等待着
非阻塞套接字——并发服务多个客户端