socketio: потеря данных из-за закрытия сокета из-за ошибки транспорта - PullRequest
0 голосов
/ 22 февраля 2019

Я очень старался понять это, но пока не повезло.Поэтому я отправляю некоторые данные с сервера на клиент с использованием сокета в цикле, однако клиент не может получить все данные и без причины закрывает сокет в середине передачи данных.

Как вы можете видеть на рисунке ниже, клиент успешно получает данные до 11-й итерации цикла (см. Код сервера ниже), однако после того, как этот сокет закрыт, причина транспортной ошибки.Что я мог не так сделать здесь?

Журналы на стороне клиента

enter image description here

Журналы на стороне сервера

enter image description here

(Python) код на стороне сервера

from flask import Flask, render_template, request, flash, redirect, jsonify, make_response
from flask_socketio import SocketIO, emit, disconnect

import time

from gevent import monkey
monkey.patch_all()

app = Flask(__name__)
socketio = SocketIO(app, engineio_logger=True)

@socketio.on('run_tgt')
def run_tg(tg_args):
    for x in range(20):
         time.sleep(2)
         emit('tg_output',x)

if __name__ == "__main__":
socketio.run(app, host='0.0.0.0', debug=True)

(Javascript) код на стороне клиента

 <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
 var socket = io.connect('http://' + document.domain + ':' + location.port );
 function run_tg() {
     socket.emit('run_tgt', { 'data': 'data'});
     socket.on('tg_output', function(tg_output) {
         console.log(tg_output);
         $("#output_div").append(tg_output);
     });
 }

1 Ответ

0 голосов
/ 23 февраля 2019

Исправлена ​​проблема с добавлением патча обезьяны в верхнюю часть скрипта

from gevent import monkey
monkey.patch_all()

Также установите async_handlers в значение true

socketio = SocketIO(app, async_handlers=True, engineio_logger=True)
...