2016-12-10 3 views
1

Ich versuche, ein Array von einem Server zu senden, der alle IDs der Benutzer enthält, wenn eine Verbindung auf dem Server über Socket io hergestellt wird. Scheinbar scheint der emittierende Teil richtig zu funktionieren, aber der empfangende Teil antwortet überhaupt nicht.Eine Funktion funktioniert nicht mit Socket.io

io.sockets.on('connection', 
// here's the on connection event 
function (socket) { 
    i++; 
    ids[i]=socket.id; 
    console.log("We have a new client: " + ids[i]); 
    socket.broadcast.emit('setid', ids); 
} 
/////that is the emitting part 

jetzt ist dies das Empfangsteil:

socket.on('setid', 
    function(ids) { 
    console.log(ids); 
} 
); 

Antwort

0

Sie müssen socket.broadcast.emit('setid', ids);-socket.broadcast.emit('setid', {idArr:ids}); und console.log(ids.idArr); auf der Empfangsfunktion ändern.

als jemand fragte,

Sever

io.on('connection', 
// here's the on connection event 
function (socket) { 
    let i = 0; 
    let ids = []; 
    i++; 
    ids[i]=socket.id; 
    console.log("We have a new client: " + ids[i]); 
    socket.broadcast.emit('setid', { 
    idArr:ids 
    }); 
} 

Kunde

socket.on('setid', function(ids) { 
    console.log(ids.idArr); 
} 
); 

Als Randbemerkung, wie es hier nicht ganz klar war, socket.broadcast.emit mit allen Kunden emittieren soll, außer Der Socket sendet die emit Also, bis Sie eine andere Client-Instanz öffnen wird es nicht emittieren.

+0

Ihr Code ist in Ordnung, zeigen Sie uns bitte den gesamten Code des Kunden. Sind Sie sicher, dass der Client das Array nicht empfängt? – mk12ok

+0

Ich habe meine Antwort @ mk12ok aktualisiert. Ich werde schnell ein Dummy-Projekt erstellen, um es zu testen, obwohl ich ziemlich sicher bin, dass das funktionieren sollte. –

+0

Es ist völlig in Ordnung, das Array 'ids' zu senden. Ihre Lösung, um das Objekt '{idArr: ids}' zu senden, wird auch funktionieren, aber warum die Dinge kompliziert machen? – mk12ok

0

Blick auf das folgende Beispiel, es ist sehr einfach, nur die socket.io-Server und der socket.io-client Client (Sie können npm install socket.io-client zuerst ausgeführt haben):

khalil-server.js

const io = require('socket.io')(3001); 
var ids = []; 
io.on('connection', function (socket) { 
    'use strict'; 
    ids.push(socket.id); 
    console.log("We have a new client: " + socket.id); 
    socket.broadcast.emit('setid', ids); 
}); 
console.log('Server started at port 3001'); 

khalil -client.js

const socket = require('socket.io-client')('http://localhost:3001'); 
socket.on('setid', function (ids) { 
    console.log(ids); 
}); 

Starten Sie den Server mit node khalil-server und so viele Kunden wie möglich, um mit node khalil-client (dir müssen mindestens zwei Client-Instanzen ausführen, da wir die socket.broadcast.emit verwenden). Es funktioniert einfach. Bitte zeigen Sie uns mehr von Ihrem Code und wir werden versuchen, einen Fehler zu finden.

Verwandte Themen