14 Stimmen

socket.on('connection' ... Ereignis wurde nie ausgelöst nodejs + express + socket.io

問題点 socket.io funktioniert nicht

詳細

  • Erzeugt ein Projekt mit express [folder]; cd [folder]; npm install;
  • Einrichtung socket.io npm install socket.io
  • Starten Sie die Node-App mit folgendem Code
  • Kunde verbinden Ereignis wird ausgelöst, aber Server Verbindung NIE gefeuert.

Einrichtung

  • Server AWS Free Tier, Ubuntu 11.10, ami-a7f539ce
  • nodejs v0.6.5
  • express v2.5.1
  • socket.io v0.8.7

Kunde

 var socket = io.connect('http://example.com:3000');

 socket.on('connect', function() { 
    console.log('connected');
 });

 socket.on('message', function(msg){
    console.log(msg);
 });

 socket.on('disconnect', function() {
    console.log('disconnected');
 });

 socket.on('error', function (e) {
    console.log('System', e ? e : 'A unknown error occurred');
 });

Server

 [...]

 app.listen(3000);

 // socket.io setup
 var socket = require('socket.io').listen(app);

 // socket.io connection establishment
 socket.on('connection', function (client) {
    client.send("hello");
    console.log("hello", client);           
 });

Warum ist Verbindung Ereignis nie ausgelöst?

14voto

Ricardo Tomasi Punkte 33062

Es dauerte eine Weile, bis ich es bemerkte... die connection Ereignis wird ausgelöst am io.sockets . In Ihrem Code würde dies lauten

socket.sockets.on('connection', function (client) {
  client.send("hello")
  console.log("hello", client)
})

Sie sollten Folgendes verwenden io anstelle von socket als Var-Name, um diese Verwechslung zu vermeiden.

1voto

Valerio Punkte 1970

Ricardo Tomasi ist richtig, hat mir das Leben gerettet, ich war am Durchdrehen.

Auch wenn sich die Dinge geändert haben, wir befinden uns im Jahr 2013, es gibt immer noch eine offene Frage (seit 2 Jahren) zu diesem Thema

Wahrscheinlich hat sich etwas geändert, jedenfalls musste ich dies tun, um das Ereignis "Verbinden" zu registrieren:

var openSocket = function (uniqueID) {
  var appSocket = io.connect('/'+uniqueID, { transports: ['websocket', 'xhr-polling']});
  appSocket.socket.on('connect', function () {
    console.log('i did connect.');
  });
  return appSocket;
};

1voto

gogaman Punkte 430

Folgendes hat bei mir funktioniert: socket.io-client: "^0.9.16"

io.connect("http://localhost:4000", {'force new connection': true});

Jetzt wird das Ereignis "Verbinden" immer wieder ausgelöst, und es gibt keine Wiederverwendung.

Ich habe diese Option herausgefunden, indem ich socket.io-client/lib/io.js Zeile: 192 untersucht habe. Da ich diese io.js-Datei nicht einmal in github finden kann, denke ich, dass es in zukünftigen Versionen ein Refactoring gibt und diese Option möglicherweise nicht funktioniert.

Zumindest könnte dies für jemanden hilfreich sein, der diese befristete Arbeit übernimmt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X