Je récupère des données de flask avec socketIO à partir du niveau de réaction:

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)

Dans Flask cela fonctionne bien, mais si je passe à send(current_time) au lieu de return current_time j'obtiens une valeur indéfinie dans React, alors quelle est la différence entre return() et send() dans ce cas?

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;
0
Qbik 10 févr. 2021 à 00:53

1 réponse

Meilleure réponse

La valeur de retour d'un point de terminaison Socket.IO en Python est renvoyée au client sous forme de paquet ACK (comme dans l'accusé de réception). Le client JavaScript rend cette valeur accessible à l'application en passant la valeur dans le rappel d'achèvement du emit() à l'origine de tout:

socket.emit('time', function(data) {
    // data is what the Python event handler returns
});

Lorsque le serveur appelle la fonction send(), il émet un événement message vers le client, indépendamment de l'événement d'origine que le client a émis vers le serveur. Pour obtenir les données d'un appel send(), le client doit implémenter un gestionnaire d'événements pour l'événement message:

socket.emit('time');
socket.on('message', function(data) {
    // data is what the Python side passes in the send() call
});
1
Miguel 10 févr. 2021 à 14:51