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

问题描述 投票:1回答:1

我一直在努力想出这个,但到目前为止还没有运气。所以我在循环中使用套接字从服务器向客户端发送一些数据但是客户端无法接收所有数据并在数据传输过程中无缘无故地关闭套接字。

正如您在下图中所见,客户端成功接收数据直到循环的第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);
     });
 }
javascript python socket.io flask-socketio
1个回答
0
投票

修复了通过在脚本顶部添加monkey patch的问题

from gevent import monkey
monkey.patch_all()

同时将async_handlers设置为true

socketio = SocketIO(app, async_handlers=True, engineio_logger=True)
© www.soinside.com 2019 - 2024. All rights reserved.