Когда я использую flask-socketio
с react
, кажется, что он уже подключен, но событие в колбе не работает.
Кажется, подключен с терминала.
* Debugger is active!
* Debugger PIN: 246-185-917
(14802) wsgi starting up on http://127.0.0.1:5000
(14802) accepted ('127.0.0.1', 47658)
127.0.0.1 - - [26/Apr/2019 22:59:23] "GET /socket.io/?EIO=3&transport=polling&t=MfSyfS3 HTTP/1.1" 200 401 0.001679
(14802) accepted ('127.0.0.1', 47662)
(14802) accepted ('127.0.0.1', 47666)
127.0.0.1 - - [26/Apr/2019 22:59:23] "POST /socket.io/?EIO=3&transport=polling&t=MfSyfSe&sid=27c47fbfe66645a1a851212b31be8816 HTTP/1.1" 200 219 0.000912
127.0.0.1 - - [26/Apr/2019 22:59:23] "GET /socket.io/?EIO=3&transport=polling&t=MfSyfSf&sid=27c47fbfe66645a1a851212b31be8816 HTTP/1.1" 200 235 0.002975
В браузере, кажется, это также связано, когда я печатаю объект socketio.
Socket {io: Manager, nsp: "/", json: Socket, ids: 0, acks: {…}, …}
acks: {}
connected: true
disconnected: false
flags: {}
id: "4ce17c17bbab45d2bab00f5dda61ea58"
ids: 0
io: Manager {nsps: {…}, subs: Array(6), opts: {…}, _reconnection: true, _reconnectionAttempts: Infinity, …}
json: Socket {io: Manager, nsp: "/", json: Socket, ids: 0, acks: {…}, …}
nsp: "/"
receiveBuffer: []
sendBuffer: []
subs: (3) [{…}, {…}, {…}]
_callbacks: {$connecting: Array(1), $connect: Array(2), $reply: Array(1), $my response: Array(1)}
__proto__: Object
Вот код теста, ожидаемый ответ не печатается.
this.socket.on("connect", () => {
console.log("..."); // can print
console.log(this.socket); // can print
this.socket.emit("reply", {msg: "hihi"}); // no output on terminal
})
this.socket.on("reply", (data) => {
console.log(data); // no output even "undefined"
});
testClick() {
console.log("click"); // output on console
const ret = this.socket.emit("reply", {data: "hihi"}) // no output on flask terminal
console.log(ret); // output on console
}
@socketio.on("connect", namespace="/")
def connect():
socketio.emit("reply", {"data": "what"})
print("connect") // no such output
@socketio.on("reply", namespace="/")
def reply(data):
print(data) // no such output
Вот как я создаю сокет-соединение.
this.socket = io("http://localhost:5000");
# __init__.py
from flask import Flask
from flask_cors import CORS
from flask_socketio import SocketIO
socketio = SocketIO()
def create_app(debug=True):
"""Create an application."""
app = Flask(__name__)
app.debug = debug
app.config['SECRET_KEY'] = 'gjr39dkjn344_!67#'
CORS(app)
from .routes import authen
from .api import api
app.register_blueprint(authen.auth_bp)
app.register_blueprint(api.api_bp)
socketio.init_app(app)
return app
# main.py
from app import create_app, socketio
app = create_app(debug=True)
if __name__ == '__main__':
socketio.run(app)