Estoy usando la versión 4.2.0 de socket.io en el lado del cliente y del servidor. El servidor está en localhost 3000 y el cliente en localhost 5000.
En la primera versión del código back-end todo funciona bien, recibo un mensaje en el servidor y en el cliente inmediatamente, este es un código que funciona bien: la app es un constructor de Express Application.
import * as socketio from 'socket.io'; const io: socketio.Server = new socketio.Server({ cors: { origin: "http://localhost:5000" } }); const server: http.Server = app.listen(); // it knows that it should works on 3000 io.attach(server); io.of('/play/multi-player-lobby').on('connection', (socket: socketio.Socket) => { socket.emit('messageFromServer', { data: "req.session.user!.login" }); socket.on('dataToServer', (dataFromClient: object) => { console.log(dataFromClient) }); }); Pero esta versión del código tiene un inconveniente, no puedo pasar a los datos de usuario del lado del cliente que están conectados, por eso quiero usar io en una ruta de obtención como en la segunda versión de mi código:
archivo del servidor
const server: http.Server = app.listen(); io.attach(server); app.app.set('socketio', io);Y el archivo de ruta:
getMethod(req: Request, res: Response) { var io = req.app.get('socketio'); io.of('/play/multi-player-lobby').on('connection', (socket: socketio.Socket) => { socket.emit('messageFromServer', { data: req.session.user!.login }); socket.on('dataToServer', (dataFromClient: object) => { console.log(dataFromClient) }); }); res.json({ isLoggedIn: req.session.isLoggedIn, user: req.session.user }) }Esta versión del código también funciona, ¡pero obtengo los datos después de 30 segundos! ¿Por qué? ¿Cómo arreglar eso?
Gracias por una ayuda. Saludos desde Misugi ;)