目前可用于 python3 上带有 Flask 的 websocket 的最佳选择[关闭]

2024-04-16

目前我看到以下库可用于将 websockets 与 Flask 一起使用:

  1. 烧瓶插座 https://github.com/kennethreitz/flask-sockets(可能已过时)
  2. Flask-SocketIO https://github.com/miguelgrinberg/Flask-SocketIO
  3. gevent-websockets https://bitbucket.org/Jeffrey/gevent-websocket/(以上2个取决于此)

然而 gevent-websockets 尚不兼容 python3(至少它不能通过 pip 安装)。这使得其他 2 个也无法使用。

将 websocket 与 Flask 一起使用还有其他选择吗?或者龙卷风是最好的选择?


首先,请注意 Flask-SocketIO 与其他两个不同。它包装了 Socket.IO 协议,而不是原始的 WebSocket。这使得它能够为不支持 WebSocket 协议的客户端支持通过 HTTP 长轮询模拟的类似 WebSocket 的接口。

说到 Flask-SocketIO,请注意该扩展即将进行重大修改。

当前的官方版本(0.6)依赖于 gevent、gevent-socketio 和 gevent-websocket。不幸的是,gevent-socketio 作为一个项目早已消亡,并且停留在 Socket.IO 协议的非常旧版本上,这迫使您使用古老的 Javascript 客户端。

即将推出的 Flask-SocketIO 版本 1.0 是完全重写的,主要与 0.6 版本兼容,但它支持 Python 2 和 Python 3,并采用允许使用不同机制进行网络和并发的设计。 0.6 版本中的 gevent-socketio 依赖项被两个名为python-socketio https://github.com/miguelgrinberg/python-socketio and python-engineio https://github.com/miguelgrinberg/python-engineio,它实现了当前版本的 Socket.IO 协议,并支持所有官方 Socket.IO 客户端(Javascript、Swift 和 C++)。

就低级依赖关系而言,您基本上有三个选择:

  1. Eventlet

    在 Py2 和 Py3 上,Eventlet 是迄今为止性能最高、最稳定的选项。 WebSocket 支持是 eventlet 的原生支持,因此只需在 virtualenv 中安装 eventlet 即可使 Flask-SocketIO 以最佳配置工作。

  2. gevent 和 gevent-websocket

    如果出于某种原因您更喜欢 gevent,那也可以,但在我的测试中它的性能不如 eventlet。如果你想在使用 gevent 时访问 WebSocket,那么你还需要安装 gevent-websocket 包。 gevent 和 gevent-websocket 都已移植到 Python 3,但一切都太新了。

  3. Werkzeug(或任何其他多线程 WSGI 兼容服务器)

    您还可以使用 Flask 自己的 Web 服务器。在此模式下,扩展仅在长轮询模式下工作。与其他两者相比,性能显然很糟糕,但对于开发和调试来说,能够让一切正常工作而无需运行 eventlet 或 gevent 是件好事,因为它们带来了所有复杂性。

截至今天(2015 年 10 月 4 日),新的 Flask-SocketIO 扩展已发布功能齐全的测试版。正式版本即将发布。您可以使用以下命令安装测试版:

pip install flask-socketio==1.0b1

该代码可在 git 存储库的 1.0 分支上找到:https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0 https://github.com/miguelgrinberg/Flask-SocketIO/tree/v1.0.

免责声明:我确信现在已经很清楚了,但为了以防万一,请注意我是 Flask-SocketIO、python-socketio 和 python-engineio 的作者。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目前可用于 python3 上带有 Flask 的 websocket 的最佳选择[关闭] 的相关文章

随机推荐

  • SimpleDateFormat 在模拟器上工作正常,但在设备上错误

    我使用 SimpleDateFormat 从日期中提取相关信息 它在模拟器中运行得很好 但是在设备上测试时它无法正确格式化 Logcat 在模拟器中正确显示 但在手机上再次显示错误 private String getSectionHead
  • 在生产中使用 Postgres 配置 Rails

    我一直在谷歌上搜索有关如何将 Ruby on Rails 与 PostgreSQL 结合使用的教程 那里有一些非常好的信息 但几乎每个指南都集中在如何配置 Rails 以在开发和测试环境中使用 Postgres 他们会警告您不要将这些配置用
  • 当项目中有多个文件时,如何使用 Grunt 配置 LESS 的 sourceMap?

    我有多个 less 文件 我希望将它们处理为匹配的 css 每个文件的 sourceMaps 都与源位于同一文件夹中 这有多难 我用 less 直接执行此操作没有问题 但无法弄清楚如何在 grunt contrib less 中执行此操作
  • RESTful 设计:分页集合

    我正在设计一个 REST api 需要从服务器端强制执行分页 每个 x 翻阅任何资源集合的正确方法是什么 选项1 GET resource page
  • Swift @escaping 和完成处理程序

    我试图更准确地理解 Swift 的 闭包 But escaping and Completion Handler太难理解了 我查了很多Swift的帖子和官方文档 但感觉还是不够 这是官方文档的代码示例 var completionHandl
  • 如何向 Google 地图上的信息窗口添加组合框和按钮?

    目前 我正在开发一个应用程序 其中我必须在地图本身的单击事件上显示一个信息窗口 我的问题是我想在此信息窗口上显示一个按钮和一个组合框 我怎样才能做到这一点 您需要添加自定义UIView给你的MK地图视图并抑制默认值MK注释标注视图 您的定制
  • 在 Chrome 中无需右键单击即可检查元素

    When I inspect html css on a website I usually open the chrome developers panel ctrl shift I right click context menu in
  • 如何通过着色器管道传递顶点颜色?

    我试图通过顶点 几何和片段着色器传递顶点颜色 glBegin GL POINTS glVertex3f 2 0f 0 0f 0 0 glColor3f 0 0 1 0 0 0 glVertex3f 2 0f 0 0f 0 0 glColor
  • jQuery while 循环不等待动画

    我有一个 jQuery 函数可以执行以下操作 clone 在一个物体上 然后 insertAfter and a slideDown 在克隆的对象上 整个函数被包装在一个while环形 我将尽可能简短并展示一个通用示例 while stat
  • 将函数应用于不包括按值嵌套的数据表子集

    我有一个与此相关的问题 我之前曾问过 从 foreach 循环赋值 https stackoverflow com questions 18767016 assignment of a value from a foreach loop 1
  • Laravel 5 调整图像大小

    我使用 Laravel 5 并有一个上传图像的表单 保存文件时 我在控制器方法中获取图像并将其放入目录中 if request gt hasFile picture destinationPath uploads filename imag
  • jQuery-tokeninput 失败:“term”未定义?

    在我的 Rails 应用程序中 我尝试使用 jquery tokeninput 我一切正常 json 响应和所有 但当在标记化字段中输入任何内容时 脚本会出错 并抱怨 TypeError term is undefined gt retur
  • 如何阻止 Maven 覆盖资源文件

    我有默认的 Maven 结构 main java resources webapp 我看到每个mvn compile复制资源 即使它们没有改变 我应该怎么做才能仅复制更改的文件
  • 无法以管理员身份运行

    我必须执行ewfmgr exe仅当以管理员身份打开命令窗口时才能执行 如果我去Start gt type cmd exe gt Right click gt Run as Administrator然后出现以下命令提示符窗口 在这个窗口中
  • SQL 查询查找具有最匹配关键字的行

    我真的不擅长 SQL 我想知道我可以运行什么 SQL 来解决下面的问题 我怀疑这是一个 NP 完全问题 但我可以接受查询需要很长时间才能在大型数据集上运行因为这将作为后台任务完成 首选标准 SQL 语句 但如果需要存储过程 那就这样吧 SQ
  • Ruby - 如何在 Prawn 中使用不同的字体?

    我有一个小型 Rub y 程序 我使用 Prawn 将一些文本打印到 PDF 中 但一小部分文本是非英语字符 其中一些文本是中文 一些是希腊文 等等 当我运行我的程序时 我当然会收到一条错误消息Your document includes
  • StructureMap通过注入解决依赖而不是服务定位

    在我的项目中我注册了很多ISerializers使用装配扫描仪的实现 FWIW这是注册我的代码ISerializers Scan scanner gt scanner AssemblyContainingType
  • 在箱线图中标记散点图点以及R中图形中箱线图的摘要

    祝大家好 我需要帮助找到在箱线图中标记散点图的解决方案 如下图所示 有两个数据 第一个是所有宏观宇宙的数据 第二个是每个宏观宇宙的平均值 Tab1 查询结果 1 2 3 4 5 6 1 13 2089 13 3161 13 2497 13
  • Tcl 脚本中错误的静态检测

    我已经开发了一些代码 并且在 Linux 机器上遇到了 Tcl 解释器错误标记的问题 usr bin tclsh if 1 puts abc1 elseif puts abc2 上面的代码没有标记错误 elseif 条件 直到进入elsei
  • 目前可用于 python3 上带有 Flask 的 websocket 的最佳选择[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目前我看到以下库可用于将 websockets 与 Flask 一起使用 烧瓶插座 https gith