如何获取 JavaScript Socket.IO 版本?

How to get JavaScript Socket.IO version?

我在 Python 应用程序中使用 Flask and Flask-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-SocketIO 的文档中找到 this table,这表明我的系统存在版本不兼容问题。

我想知道我有哪个版本的 JavaScript Socket.IO。这怎么能做到?


系统详细信息

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

Flask                                     1.1.2
Flask-SocketIO                            5.0.1
python-engineio                           4.0.0
python-socketio                           5.0.4

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

来自socket.io Client API

The protocol defines the format of the packets exchanged between the client and the server. Both the client and the server must use the same revision in order to understand each other.

确定客户端的修订号,

来自 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. 在文件 __init__.py 中搜索 __version__。该行将如下所示:
__version__ = '5.0.2dev'
  1. 使用那个 __version__ 值,查找相应的 Socket.IO 协议版本:
+--------------+----------------+
| __version__  |  protocol rev. |
+--------------+----------------+
|    4.x.x     |     3, 4       |
+--------------+----------------+
|    5.x.x     |     5          |
+--------------+----------------+

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

<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>

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

希望这对你有用 要查看代码的 javaScript 部分,您可以查看我的问题:

好吧,多亏了前面两个对这个问题的回答,我终于知道如何识别JavaScriptSocket.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 table and this comment on a Flask-SocketIO issue,我现在只需将 Flask-SocketIO 固定在我的包裹要求中,如下所示:Flask-SocketIO>=4.3.2,<5.

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

版本兼容性可以看下图:

最近我在 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"