当前位置: 首页 > news >正文

为什么 waitress 不支持 WebSocket?

waitress 是一个纯 Python 实现的 WSGI 服务器,主要用于生产环境部署 Python Web 应用。但它不支持 WebSocket 协议,因为它只实现了 WSGI 规范,而 WebSocket 协议需要 ASGI(Asynchronous Server Gateway Interface)支持。

为什么 waitress 不支持 WebSocket?

  • 协议不同 :WSGI 是为同步的、短连接的 HTTP 请求 - 响应周期设计的,而 WebSocket 是一种基于 TCP 的全双工通信协议,允许在客户端和服务器之间进行长期的、实时的双向通信,这超出了 WSGI 的设计范围。
  • 阻塞性质waitress 是一个多线程服务器,适合处理传统的 HTTP 请求,但对于 WebSocket 这种需要长时间连接和非阻塞 I/O 的场景,其性能和架构并不适用。

要支持 WebSocket 的 Django 项目,应使用支持 ASGI 的服务器,如 Daphne 或 Uvicorn。

支持 WebSocket 的服务器选择

  1. Daphne

    • Daphne 是一个 ASGI HTTP 和 WebSocket 服务器,专为 Django Channels 设计。它支持将 Django Channels 项目暴露为 HTTP 和 WebSocket 服务。
    • 使用方法:
    • 首先安装 Daphne:
pip install daphne
 * 然后运行服务器:
daphne -p 8000 myproject.asgi:application
  1. Uvicorn

    • Uvicorn 是一个快速的 ASGI 服务器,适合现代 Python Web 框架,包括 Django Channels。它支持 HTTP/1.1 和 WebSocket。
    • 使用方法:
    • 安装 Uvicorn:
pip install uvicorn
 * 运行服务器:
uvicorn myproject.asgi:application --host 0.0.0.0 --port 8000

在生产环境中,可以将 Daphne 或 Uvicorn 与反向代理服务器(如 Nginx)结合使用,以提高性能和安全性。

相关文章:

  • python文件类操作:json/ini配置文件、logging日志统计、excel表格数据读写、os操作库
  • 多模态融合(十一): SwinFusion——武汉大学马佳义团队(二)
  • Java中包装类和泛型
  • 导出excel文件并在页面自动下载
  • TCP/IP、UDP、HTTP、HTTPS、WebSocket 一文讲解
  • 从零开始搭建CLIP模型实现基于文本的图像检索
  • elementUI中MessageBox.confirm()默认不聚焦问题处理
  • UML-共享汽车系统通信图深度解析
  • 蓝桥杯练习题2
  • Codeforces Educational Round 177 Div. 2 【B题,C待补
  • Unity:获取组件对象(GetComponent<T>())
  • MinnowBoard MAX单板UEFI BIOS代码编译教程
  • Spring 学习笔记之 @Transactional详解
  • 4N60-ASEMI开关电源与适配器专用4N60
  • 运筹学之遗传算法
  • Rust网络编程实战:全面掌握reqwest库的高级用法
  • QT+Cmake+mingw32-make编译64位的zlib-1.3.1源码成功过程
  • 深度学习--卷积神经网络CNN原理
  • 功能性高斯泼溅扩散——DiffGS: Functional Gaussian Splatting Diffusion
  • yolov8的数据处理lableimg的安装以及使用
  • 迪卡侬回应出售中国业务30%股份传闻:始终扎根中国长期发展
  • 徐徕任上海浦东新区副区长,此前已任区委常委
  • “女乘客遭顺风车深夜丢高速服务区”续:滴滴永久封禁两名涉事司机账号
  • 锦江酒店:第一季度营业收入约29.42亿元,境内酒店出租率同比增长
  • 游客曝九寨沟打网约车被出租车围堵,景区回应:当地无合规网约车
  • 神舟十九号载人飞船因东风着陆场气象原因推迟返回