2016-05-06 27 views
1

Also richte ich eine Express-App mit all den üblichen Leckerbissen wie Reisepass, Mungo, Connect-Flash usw. ein, und ich benutze socket.io, um Nachrichten zu empfangen und auszugeben.Kann keine Socket-Nachricht vom Client senden

Zur Zeit sende ich nur Nachrichten an alle (wird später Räume einrichten) und alles (aber das) funktioniert super. Wenn ein Endbenutzer eine Seite besucht, erhalten alle aktuell verbundenen Benutzer eine Nachricht "Hallo alle!", Und der Benutzer, der gerade verbunden ist, sendet offensichtlich auch die Nachricht. Alle als bisher erwartet ...

Das Problem: Ich habe eine Seite, die eine Schaltfläche auf sie ...

<button id="register" type="button" class="btn btn-warning">Register</button>

Wenn Sie darauf klicken, sollte diese eine Nachricht aussenden sagen ' Ich möchte mich registrieren!' (derzeit für alle aber das ist noch egal). Als Reaktion darauf sollte der Server darauf achten und antworten, indem er eine Nachricht zurücksendet und sagt: "Hmmm, ich werde darüber nachdenken!".

"Registrierung" ist nie auf dem Server gehört, und so kann die Antwort der "Registrierung-Antwort" nicht ausgeben.

Kann jemand sehen, was ich falsch mache?

Ich habe das SocketIO, can't send emit data from client und ein paar andere gesehen, die ähnlich sind, aber ich bin schon zu tun, was sie vorgeschlagen haben:/

NB: Die App ist auf http://localhost:3000/ läuft und die io http://localhost:8678/events verwenden. Wenn Sie weitere Informationen benötigen, nur um mich wissen lassen,

Client-seitige JS/jQuery (app.js)

var app = app || {}; 

app = (function($){ 

    $(function() { 

     ///////////////////////////////////////////////////// 
     // Connect to io and setup listeners 
     ///////////////////////////////////////////////////// 

     var socket = io.connect('http://localhost:8678/events'); 
     socket.on('connected', function (data) { 
      console.log(data); // Always see this in the console 
     }); 

     socket.on('registration-response', function (data) { 
      console.log(data); // NOT seen in console 
     }); 

     ///////////////////////////////////////////////////// 
     // Setup click events 
     ///////////////////////////////////////////////////// 

     $('#register').on('click', function(){ 
      console.log('click'); // Always see this, so no binding issue 
      socket.emit('registering', 'I want to register!'); 
     }); 
    }); 

})(jQuery); 

Server-seitige JS

var app = require('express'); 
var http = require('http'); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); //pass a http.Server instance 
server.listen(8678); //listen on port 8678 

//////////////////////////////////////// 
// Register event listeners  
//////////////////////////////////////// 

var events = io.of('/events'); 

events.on('connection', function(socket){ // This is heard and callback fires 
    events.emit('connected', 'Hi everyone!'); // This gets sent fine 
}); 

events.on('registering', function(data){ 
    events.emit('registration-response', 'Hmmm, will think about it!'); 
}); 

Antwort

4

Ihre Steckdose auf Der Server ist nicht für das Abhören des Ereignisses eingerichtet.

Sie benötigen es, wie diese

events.on('connection', function(socket){ // This is heard and callback fires 
    events.emit('connected', 'Hi everyone!'); // This gets sent fine 
    socket.on('registering', function(data){ 
     events.emit('registration-response', 'Hmmm, will think about it!'); 
    }); 
}); 

Die Buchse jetzt zu tun weiß, was zu tun ist, wenn es die ‚Registrierung‘ Ereignis empfängt und die Antwort auf die ‚/ events‘ Namespace senden.

+0

Erstaunlich! Einfach so: -0 – ann0nC0d3r

+0

Du hast meinen 4-stündigen Abstieg in den Wahnsinn erfolgreich beendet und dafür danke ich dir – Gab

Verwandte Themen