我一直在努力解决这个问题,但到目前为止还没有运气。 因此,我正在使用套接字以循环方式从服务器向客户端发送一些数据,但是客户端无法接收所有数据,并且无缘无故在数据传输过程中关闭了套接字。
正如您在下图中所看到的,客户端成功接收数据直到循环的第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);
});
}
答案 0 :(得分:0)
通过在脚本顶部添加猴子补丁来解决此问题
from gevent import monkey
monkey.patch_all()
还将async_handlers设置为true
socketio = SocketIO(app, async_handlers=True, engineio_logger=True)