Saya menggunakan Flask dan Flask-SocketIO di dalam aplikasi Python.

Baru-baru ini, ketika saya memulai aplikasi, saya diberi pesan ini:

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)

Dari penelusuran saya, saya menemukan tabel ini di Flask-SocketIOs' docs, yang menunjukkan saya memiliki versi yang tidak kompatibel di sistem saya.

Saya ingin mengetahui versi JavaScript Socket.IO yang saya miliki. Bagaimana ini bisa dilakukan?


Detail Sistem

Jika tidak jelas, saya baru mengenal JavaScript.

  • OS: macOS versi 10.15.7
  • Versi JavaScript: 1.7
  • Peramban: Google Chrome versi 87.0.4280.88
  • Versi Python: 3.8.6
  • Paket dari lingkungan virtual Python:
Flask                                     1.1.2
Flask-SocketIO                            5.0.1
python-engineio                           4.0.0
python-socketio                           5.0.4
1
Intrastellar Explorer 9 Januari 2021, 00:08

3 jawaban

Jawaban Terbaik

Konflik mungkin dari penggunaan revisi protokol yang berbeda pada klien dan server.

Dari socket.io Client API:

Protokol mendefinisikan format paket yang dipertukarkan antara klien dan server. Baik klien maupun server harus menggunakan revisi yang sama agar dapat saling memahami.

Untuk menentukan nomor revisi klien,

Dari HTML:

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

  const revisionNumber = socket.protocol;
</script>

Atau dari JavaScript:

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

const revisionNumber = io.protocol;

Atau dari kode sumber Flask-SocketIO:

  1. cari __version__ di file __init__.py. Garisnya akan terlihat seperti ini:
__version__ = '5.0.2dev'
  1. Dengan menggunakan nilai __version__ itu, cari revisi protokol Socket.IO yang sesuai:
+--------------+----------------+
| __version__  |  protocol rev. |
+--------------+----------------+
|    4.x.x     |     3, 4       |
+--------------+----------------+
|    5.x.x     |     5          |
+--------------+----------------+
2
terrymorse 8 Januari 2021, 23:32

Saya telah menemukan solusi. Seperti inilah tampilan kepala file index.html saya:

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

Saya menemukan skrip ini dari beberapa tutorial di youtube. Saya memprogram di Pycharm dan ketika saya pergi mengklik tautan di baris ini: <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> itu membuka popup yang menanyakan apakah saya ingin menginstal paket.

Semoga ini berhasil untuk Anda untuk melihat bagian javaScript dari kode, Anda dapat melihat pertanyaan saya: Bagaimana cara menginstal flask-socketIO dengan benar?

1
Constantine Westerink 9 Januari 2021, 23:47

Baiklah, berkat dua jawaban sebelumnya untuk pertanyaan ini, saya akhirnya menemukan cara mengidentifikasi versi JavaScript Socket.IO.

Alasan yang mendasari saya tidak bisa mengetahui lebih cepat adalah:

  • Saya mewarisi basis kode ini, jadi saya tidak benar-benar apa yang diimpor dari mana
  • Saya tidak begitu tahu Flask

Versi JavaScript Socket.IO dipanggil dalam layout.html di direktori templates (lihat Flask dokumen di sini). Di dalam elemen <head>, skrip socket.io.js disematkan:

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

Ini dengan jelas menyebut versi JavaScript Socket.IO menjadi 2.0.4.

Jadi, per tabel kompatibilitas versi Flask-SocketIO dan komentar ini pada masalah Flask-SocketIO, Sekarang saya hanya akan menyematkan Flask-SocketIO dalam persyaratan paket saya seperti: Flask-SocketIO>=4.3.2,<5.

Karena jawaban ini untuk kasus penggunaan saya, dan tidak umum, saya tidak akan menerimanya sebagai jawabannya.

0
Intrastellar Explorer 10 Januari 2021, 03:31