首页 > 解决方案 > 烧瓶与 Socket.io 崩溃

问题描述

我有一个烧瓶应用程序,我正在尝试在服务器和客户端之间进行通信,但出现以下错误。

应用程序.py

app = Flask(__name__)
app.config.from_object(__name__)
dashboard.config.init_from(file='./config.cfg')
dashboard.bind(app)

socketio = SocketIO(app)

app.config['SECRET_KEY'] = "secret"
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:adm@localhost:5432/adm'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['USER_APP_NAME'] = "teste"
app.config['USER_ENABLE_EMAIL'] = False
app.config['USER_ENABLE_USERNAME'] = True
app.config['USER_REQUIRE_RETYPE_PASSWORD'] = True
app.config['USER_ENABLE_REGISTER'] = True
app.config['USER_ENABLE_REMEMBER_ME'] = False
app.config['USER_USER_SESSION_EXPIRATION'] = 28800

api = Api(app)
CORS(app, resources={r'/*': {'origins': '*'}})
user_manager = UserManager(app, banco, UsuarioBD)

def random_with_N_digits(n):
    range_start = 10**(n-1)
    range_end = (10**n)-1
    return randint(range_start, range_end)

@socketio.on("response_demo")
def background_task_func():
    """Example of how to send server generated events to clients."""
    
    numero1 = random_with_N_digits(2)
    numero2 = random_with_N_digits(2)
    numero3 = random_with_N_digits(2)
    numero4 = random_with_N_digits(2)                                                                                                     
    numero5 = random_with_N_digits(2)
    data = {'Name': ['Tom', 'Joseph', 'Krish', 'John','Shadz'], 'Age': [numero1, numero2, numero3, numero4,numero5]} 
    data_2= pd.DataFrame(data)    
    df_json=data_2.to_json(orient='records')
    result = {"objects": json.loads(df_json)}
    return emit('my_response',result, json=True, broadcast=True)

@app.errorhandler(404)
def page_not_found(e):
    flash('Pagina nao encontrada')
    return redirect(url_for('user.login'))


api.add_resource(Native, '/native')

if __name__ == '__main__':
    from sql_alchemy import banco
    from waitress import serve
    banco.init_app(app)
    socketio.run(app, host='0.0.0.0', port=4000, debug=True)

索引.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Flask-SocketIO Test</title>
    <script type="text/javascript" src="//code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.3.2/socket.io.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>

</head>

<canvas id="myChart" width="100" height="20"></canvas>
<canvas id="myChart" width="100" height="100"></canvas>
    <script type="text/javascript" charset="utf-8">

// Chart.js Bar Chart
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ["Red", "Blue", "Yellow", "Green", "Purple"],
        datasets: [{
            data: [2, 2,2, 2,2],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)'
            ],
            borderColor: [
                'rgba(255,99,132,1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
 
            yAxes: [{
                ticks: {
                    beginAtZero:true
                }
            }]
        }
    }
});
window.onload = function() {
    const socket = io().connect('http://187.103.160.2:4000');

    socket.on('connect', () => {
        socket.send('Usuário conectado ao socket!')
    });



}

        $(document).ready(function() {

            var socket = io().connect('http://187.103.160.2:4000');

            socket.emit('response_demo')
            socket.on('my_response', function(obj) {
            for (var i=0; i < obj.objects.length; i++) {
             myChart.data.datasets[0].data[i] =obj.objects[i].Age;
             myChart.data.labels[i] =obj.objects[i].Name;
            
            }
                console.log('update')
                myChart.update();
           
            });

            socket.on('dados', function() {
                console.log('foi')
                });
            

        });

</script>
</html>

版本:

Flask==1.1.4
Flask-Cors==3.0.10
Flask-SocketIO==5.1.1

错误:

(3300) accepted ('177.35.206.50', 2669)
WARNING: You should provide a security key.
Scheduler is already running
177.35.206.50 - - [16/Nov/2021 16:23:55] "PUT /native HTTP/1.1" 200 322 0.126023
No commit has been made, due to the following error: Cannot retrieve the function header

我有一个为 /native 配置的 webhook,我希望每次到达 chart.js 时都会更新,在 webhook 处于活动状态后会出现错误。

网络钩子.py

def put(self):
  from app import socketio
        
  return socketio.emit('dados')

标签: javascriptpythonflasksocket.ioflask-socketio

解决方案


推荐阅读