javascript - 烧瓶与 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')
解决方案
推荐阅读
- amazon-cognito - Cognito 基于角色的身份验证不起作用
- python - 如何安装表模块以运行?
- mysql - 如何在 LOAD DATA INFILE 之后运行多个更新和插入查询
- android - 你如何管理你的资产?
- json - 比较两个 JSON 文件
- java - Hibernate Validator 的@SafeHtml 有哪些替代方法来验证字符串?
- python - 如果未动态添加,如何正确删除 Kivy 中的小部件
- json - 有没有办法判断网站上是否有 json
- java - 赫罗库 | 云实施
- selenium - 我们在哪里可以找到 GeckoDriver 的 Selenium 版本兼容版本