ElephantIO no envía a clinet y siempre muestra al usuario desconectado

Estoy enviando datos de clinet. archivo php y no puede obtener datos en el cliente. js y siempre mostrando al usuario desconectado. ¿Qué puede ser la razón?

clinet.php

use ElephantIO\Client;
use ElephantIO\Engine\SocketIO\Version2X;

$client = new Client(new Version2X('http://localhost:9009', [
        'headers' => [
        'X-My-Header: websocket rocks',
        'Authorization: Bearer 12b3c4d5e6f7g8h9i'
    ]
]));

$client->initialize();
$client->emit('user', ['foo' => 'bar']);
$client->close();

server.js

const server = require('http').createServer();
const io = require("socket.io")(server);

io.on('connection', function (socket) {
    socket.on('listen', function (data) {
        console.log('client connected');
        io.emit('user', {name: 'Marcelo Aires'});
    });

    // If some user disconnect
    socket.on('disconnect', function () {
        console.log('user disconnected');
    })
});

server.listen(9009);

cliente.js

var socket = io('http://localhost:9009');

socket.on('user', function (data) {
    console.log(data);
});

Pregunta hecha hace 3 años, 5 meses, 3 días - Por bytebard30f9


2 Respuestas:

  • El problema puede deberse a que estás escuchando por el evento 'user' en el archivo cliente.js, pero no estás emitiendo ese evento desde el lado del servidor en el momento adecuado. En tu archivo server.js, estás emitiendo el evento 'user' solo cuando recibes el evento 'listen', pero en clinet.php estás emitiendo el evento 'user' directamente sin esperar una interacción del cliente.

    Para solucionar esto, puedes modificar tu archivo server.js para emitir el evento 'user' cuando el cliente se conecta, de la siguiente manera:

    javascript
    const server = require('http').createServer();
    const io = require("socket.io")(server);
    
    io.on('connection', function (socket) {
        console.log('client connected');
        io.emit('user', { name: 'Marcelo Aires' });
    
        // If some user disconnect
        socket.on('disconnect', function () {
            console.log('user disconnected');
        });
    });
    
    server.listen(9009);
    

    Con este cambio, cuando un cliente se conecte al servidor, se emitirá el evento 'user' con los datos del usuario. Esto permitirá que el cliente.js reciba y maneje los datos correctamente.

    Asegúrate también de que el servidor se esté ejecutando correctamente en el puerto 9009 y que no haya errores en la consola del navegador al intentar conectar con el servidor.

    Respondida el Dec 18, 2020 a las 22:14 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Haya el principal es la forma en que estás emitiendo un mensaje: client.js y server.js:

    • En `client.js`, estás emitiendo un mensaje al servidor con el nombre de `user` y los siguientes como carga útil:

    
       {
         'foo': 'bar'
       }
       

    • En `server.js`, estás escuchando un mensaje del nombre `user` y estás emitiendo un mensaje de vuelta al mismo nombre, pero con una carga útil diferente:

    
       {
         'name': 'Marcelo'
       }
       

    • En `client.js`, estás escuchando un mensaje del nombre `user`, pero estás esperando recibir la carga útil del servidor como la que estás emitiendo desde el servidor, es:

    
       {
         'foo': 'bar'
       }
       

    Para resolver este error, debe cambiar el nombre del mensaje emitido desde el servidor para que совпадал con el nombre del mensaje que se está escuchando en el de la user:

    
    socket.on('user', function (data) {
        console.log('client connected');
        io.sockets.broadcast.to(socket.id).user({name: 'Marcelo'}));
    });
    

    De esta forma, el mensaje emitido desde el servidor se recibirá correctamente en el client.js y no se producirá error de "utente desconocido".

    Respondida el Dec 18, 2020 a las 22:22 - por Gemini

    Votos positivos: 0 | Votos negativos: 0