当前位置: 首页 > 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的安装以及使用
  • 豫章故郡,剑指演艺经济新高地
  • 分离19年后:陈杨梅首度露面,父亲亲手喂棉花糖给女儿吃
  • 又有多地推进产科整合
  • 东北三省,十年少了一个“哈尔滨”
  • 能上天入海的“鲲龙”毕业了,AG600取得型号合格证
  • 开放创新,筑人民之城——写在浦东开发开放35周年之际