如何用Python实现基于socket的非阻塞模式Web服务器开发?

2026-05-21 21:360阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1448个文字,预计阅读时间需要6分钟。

如何用Python实现基于socket的非阻塞模式Web服务器开发?

仅提供学习参考,转载请注明出处。描述:在开发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分钟。

如何用Python实现基于socket的非阻塞模式Web服务器开发?

仅提供学习参考,转载请注明出处。描述:在开发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请求到来,因为没有堵塞,所以循环的时候必定会报错,所以需要进行异常抛出处理。

阅读全文