2016-08-02 28 views
0

Innerhalb eines express.js-Projekts versuche ich, Daten vom nodeJS-Server an den Client zu senden.Socket io gibt nur Daten beim erneuten Laden der Seite aus

Bei Erreichen der Seite meldet das Terminal (von dem ich den Server initiierte), dass ein Benutzer über Socket verbunden ist. Beim Ausführen der Funktion, die die Socket-Funktion enthält, tritt jedoch nichts auf.

Nur beim erneuten Laden der Webseite erscheinen die ausgegebenen Daten in den Protokollen von html und Terminal Console.

Unten ist der Code, der die Buchse innerhalb einer Callback-Funktion auslösenden, in app.js

foo(function(fooCallback) { 
    console.log('Callback triggered'); 

    io.on('connection', function(socket) { 
     console.log('about to send data via socket'); 
     io.sockets.emit('person', { 'name': 'Jack Smith' }); 

    }); 
}); 

global.js - (Client-Seite nach js Skripts jquery und Buchse geladen)

var socket = io.connect(); 
    socket.on('person', function(socket){ 
     console.log('client recieved something from socket'); 
     var personName = socket.name; 
     $('#person').html(personName); 
    }); 

Warum werden Daten nur beim erneuten Laden der Webseite und nicht automatisch ausgegeben?

Antwort

0

In diesem Abschnitt des Codes:

io.on('connection', function(socket) { 
    console.log('about to send data via socket'); 
    io.sockets.emit('person', { 'name': 'Jack Smith' }); 
}); 

Sie sagen, dass Sie nur io.sockets.emit('person', { 'name': 'Jack Smith' }); wenn die io variable erste Connects ausgeführt werden sollen. Versuchen Sie, diese Veränderung zu:

io.on('connection', function(socket) { 
    console.log('about to send data via socket'); 
}); 

io.sockets.emit('person', { 'name': 'Jack Smith' }); 
+0

Ah das ist es, danke! – Robert

+0

Aber wie soll das funktionieren? An dem Punkt, an dem 'io.sockets.emit()' läuft, ist es während der Server-Initialisierung, so dass noch keine Sockets verbunden sind, so dass nichts unternommen wird. Ich frage mich, ob es innerhalb des Verbindungsrückrufs sein sollte, wie es war, aber stattdessen sollte es "socket.emit (...)" sein, also sendet es nur an den gerade verbundenen Sockel? – jfriend00

0

Ihr Problem ist, dass der Server die Verbindung Nachricht verbreitet zu spät für Sie App, die auf der ersten Last zu erfassen. Ich bin mir nicht sicher, warum Sie solche foo Callback-Funktion verwenden. Ihre io.on Connect-Logik sollte direkt in Ihre Haupt-js-Datei gehen. Ein möglicher Weg besteht jedoch darin, Ihren var io = io() zu initialisieren; innerhalb dieser foo Funktion