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
yserver.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