如何获取 JavaScript Socket.IO 版本?

问题描述

我在 Python 应用程序中使用 FlaskFlask-SocketIO

最近,当我启动应用程序时,我收到以下消息:

The client is using an unsupported version of the Socket.IO or Engine.IO protocols (further occurrences of this error will be logged with level INFO)

通过我的搜索,我在 Flask-SocketIOs 的文档中找到了 this table,这表明我的系统存在版本不兼容问题。

我想知道我拥有哪个版本的 JavaScript Socket.IO。如何做到这一点?


系统详情

如果不是很明显,我是 JavaScript 新手。

  • 操作系统:macOS 版本 10.15.7
  • JavaScript 版本:1.7
  • 浏览器:Google Chrome 版本 87.0.4280.88
  • Python 版本:3.8.6
  • 来自 Python 虚拟环境的包:
Flask                                     1.1.2
Flask-SocketIO                            5.0.1
python-engineio                           4.0.0
python-socketio                           5.0.4

解决方法

冲突可能是由于在客户端和服务器上使用了不同的协议修订版。

来自socket.io Client API

该协议定义了客户端和服务器之间交换的数据包的格式。客户端和服务器都必须使用相同的修订版才能相互理解。

要确定客户端的修订号,

来自 HTML:

<script src="<your-path-to>socket.io.js"></script>
<script>
  const socket = io('http://localhost');

  const revisionNumber = socket.protocol;
</script>

或者来自 JavaScript:

const io = require('socket.io-client');
// or with import syntax
import { io } from 'socket.io-client';

const revisionNumber = io.protocol;

或者来自 Flask-SocketIO 源代码:

  1. 在文件 __version__ 中搜索 __init__.py。该行将如下所示:
__version__ = '5.0.2dev'
  1. 使用该 __version__ 值,查找相应的 Socket.IO 协议修订版:
+--------------+----------------+
| __version__  |  protocol rev. |
+--------------+----------------+
|    4.x.x     |     3,4       |
+--------------+----------------+
|    5.x.x     |     5          |
+--------------+----------------+
,

我找到了解决办法。 这是我的 index.html 文件头部的样子:

public void run() {
    CommandLine cmd = new CommandLine(new App());
    cmd.usage(System.out,Ansi.ON);

    // business logic here...
}

我从 youtube 上的一些教程中找到了这个脚本。我正在 Pycharm 上编程,当我左键单击此行中的链接时: <title>Chat Room</title> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.4.8/socket.io.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> </head> 它打开了一个弹出窗口,询问我是否要安装该软件包。

希望这对你有用 要查看代码的 javaScript 部分,您可以查看我的问题: How do i properly install flask-socketIO?

,

好的,多亏前两个回答这个问题,我终于知道如何识别JavaScript Socket.IO的版本了。

我无法更快弄清楚的根本原因是:

  • 我继承了这个代码库,所以我并没有真正把它导入到哪里
  • 我真的不知道Flask

JavaScript Socket.IO 的版本在模板目录中的 layout.html 中调用(参见 Flask docs here)。在 <head> 元素中,嵌入了 socket.io.js 脚本:

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.4/socket.io.js"></script>

它明确指出 JavaScript Socket.IO 的版本为 2.0.4

因此,根据 Flask-SocketIOversion compatibility tablethis comment on a Flask-SocketIO issue,我现在只需将 Flask-SocketIO 固定在我的包裹要求中,如下所示:Flask-SocketIO>=4.3.2,<5。>

因为这个答案是针对我的用例,而不是通用的,所以我不会接受这个答案。

,

可以看下图了解版本兼容性:

enter image description here

最近我在我的 mac 上尝试并测试了以下版本,它们彼此完全兼容:

后端:

python-engineio==4.1.0 
python-socketio==5.2.1 
Flask==1.1.2 
Flask-SocketIO==5.0.1

前端:

socket.io-client="^3.0.0"