Javascript socketio:由于传输错误导致套接字关闭而导致数据丢失

Javascript socketio:由于传输错误导致套接字关闭而导致数据丢失,javascript,python,socket.io,flask-socketio,Javascript,Python,Socket.io,Flask Socketio,我一直在努力想办法解决这个问题,但到目前为止运气不好。 因此,我在Socket中使用Socket从服务器发送数据到客户端,但是客户端不能接收所有的数据,并且在没有理由的情况下在数据传输的中间关闭套接字。p> 正如您在下图中所看到的,在循环的第11次迭代之前,客户机成功地接收数据(请参阅下面的服务器代码),但是由于传输错误,在该套接字关闭之后。我可能做错了什么 客户端日志 服务器端日志 (Python)服务器端代码 from flask import Flask, render_templat

我一直在努力想办法解决这个问题,但到目前为止运气不好。 因此,我在Socket中使用Socket从服务器发送数据到客户端,但是客户端不能接收所有的数据,并且在没有理由的情况下在数据传输的中间关闭套接字。p> 正如您在下图中所看到的,在循环的第11次迭代之前,客户机成功地接收数据(请参阅下面的服务器代码),但是由于传输错误,在该套接字关闭之后。我可能做错了什么

客户端日志

服务器端日志

(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);
     });
 }

var socket=io.connect('http://'+document.domain+':'+location.port);
函数run_tg(){
emit('run_tgt',{'data':'data'});
socket.on('tg\u output',函数(tg\u output){
控制台日志(tg_输出);
$(“#output_div”).append(tg#u output);
});
}

通过在脚本顶部添加monkey补丁修复了该问题

from gevent import monkey
monkey.patch_all()
还将async_处理程序设置为true

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

通过在脚本顶部添加monkey补丁修复了此问题

from gevent import monkey
monkey.patch_all()
还将async_处理程序设置为true

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

您使用的是eventlet还是gevent?如果是,您是否对标准库进行了修补,使其成为绿色线程友好型库?嗨,米格尔,感谢您的回复,我用的是gevent,是的,我用的是monkeypatch@Miguel我更新了代码片段以添加更多内容details@Miguel只是看了一下gevent monkey patch,在将monkey patch线移动到绝对顶部后,一切似乎都在运行。感谢您指出这一点。您使用的是eventlet还是gevent?如果是,您是否对标准库进行了修补,使其成为绿色线程友好型库?嗨,米格尔,感谢您的回复,我用的是gevent,是的,我用的是monkeypatch@Miguel我更新了代码片段以添加更多内容details@Miguel只是看了一下gevent monkey patch,在将monkey patch线移动到绝对顶部后,一切似乎都在运行。谢谢你指出这一点。