reactjs - Flask socket IO - socket.on 方法中的发送和返回有什么区别
问题描述
我正在从反应级别使用 socketIO 从烧瓶中获取数据:
from flask import Flask
from flask_socketio import SocketIO, emit, send
from flask_cors import CORS
import datetime
app = Flask(__name__)
CORS(app)
socketio = SocketIO(app, cors_allowed_origins="*") # mayby too much CORS handling...
@socketio.on('time')
def time():
current_time = datetime.datetime.now().strftime("%H:%M:%S")
return current_time
if __name__ == '__main__':
socketio.run(app)
在 Flask 中它工作正常,但是如果我切换到send(current_time)
而不是我在 React 中得到未定义的值,那么在这种情况下和return current_time
有什么区别?return()
send()
import React, { useState, useEffect } from "react";
import socketIOClient from "socket.io-client";
const ENDPOINT = "http://127.0.0.1:5000";
function SubscribeToTimer() {
const [response, setResponse] = useState(1);
useEffect(() => {
const socket = socketIOClient(ENDPOINT);
socket.emit('time', function (data) {
console.log('time: ', data);
setResponse(data);
})
},[]);
return (
<div>
<p>It's {response}</p>
</div>
);
}
export default SubscribeToTimer;
解决方案
Python 中 Socket.IO 端点的返回值作为 ACK 数据包(如确认)发送回客户端。emit()
JavaScript 客户端通过在发起所有内容的完成回调中传递值来使应用程序可以访问此值:
socket.emit('time', function(data) {
// data is what the Python event handler returns
});
当服务器调用该send()
函数时,它会向客户端发出一个message
事件,与客户端向服务器发出的原始事件无关。要从send()
调用中获取数据,客户端需要为事件实现事件处理程序message
:
socket.emit('time');
socket.on('message', function(data) {
// data is what the Python side passes in the send() call
});
推荐阅读
- python - 如何在tensorflow2中改变像numpy和pytorch这样的张量?
- mysql - Spring boot MariaDB Vault 用户名凭据在启动期间不可用
- flutter - 什么是颤振中的构建器功能?
- scala - 线程“main”中的异常 java.lang.NoClassDefFoundError: intellij 中 spark scala 应用程序中的 org/apache/spark/sql/catalyst/StructFilters
- java - 并行流功能需要更多时间
- reactjs - 在 React 中从一个页面重定向到另一个页面
- r - 在正文末尾运行脚本
- python-3.x - 如何在具有 glibc 2.14 的 unix 机器上导入 spacy 3?
- node.js - Socket.io 安装抛出 Missing required argument 错误
- mypy - 输入空 __slots__ 的规范方法是什么?