如何用Python实现基于socket的非阻塞模式Web服务器开发?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1448个文字,预计阅读时间需要6分钟。
仅提供学习参考,转载请注明出处。描述:在开发web服务器接收http请求时,socket在recv等待接收数据时,服务端是阻塞的。用于等待http发送过来的数据。那么这个等待,实际上也是阻塞的。
仅供学习参考,转载请注明出处
需求描述
在开发web服务器接受http请求的时候,socket在recv等待接受数据的时候,服务端是堵塞的。
用于等待http发送过来的数据。
那么这个等待,其实也是会占用服务端的资源的。
为了节省这个资源,可以采用非堵塞的方式来进行socket等待监听,就是每次轮询监听一下,并不会堵塞等待。
修改为非堵塞方式
首先修改socket为非堵塞模式,并且创建一个专门用来存放client_socket的list
server_socket.setblocking(False)
# 创建用来存放子进程的list
client_socket_list = list() # 因为是非堵塞的方式,所以需要存放接受到要处理的client_socket
设置tcp的主socket等待接受http请求到来,因为没有堵塞,所以循环的时候必定会报错,所以需要进行异常抛出处理。
本文共计1448个文字,预计阅读时间需要6分钟。
仅提供学习参考,转载请注明出处。描述:在开发web服务器接收http请求时,socket在recv等待接收数据时,服务端是阻塞的。用于等待http发送过来的数据。那么这个等待,实际上也是阻塞的。
仅供学习参考,转载请注明出处
需求描述
在开发web服务器接受http请求的时候,socket在recv等待接受数据的时候,服务端是堵塞的。
用于等待http发送过来的数据。
那么这个等待,其实也是会占用服务端的资源的。
为了节省这个资源,可以采用非堵塞的方式来进行socket等待监听,就是每次轮询监听一下,并不会堵塞等待。
修改为非堵塞方式
首先修改socket为非堵塞模式,并且创建一个专门用来存放client_socket的list
server_socket.setblocking(False)
# 创建用来存放子进程的list
client_socket_list = list() # 因为是非堵塞的方式,所以需要存放接受到要处理的client_socket
设置tcp的主socket等待接受http请求到来,因为没有堵塞,所以循环的时候必定会报错,所以需要进行异常抛出处理。

