2016-08-01 21 views
1

Ich versuche, ein Ereignis an alle Sockets zu emittieren, aber ich habe einen Fehler, den ich nicht verstehe.Socket.io - Fehler: socket.packet ist keine Funktion

Der Code ist ganz einfach:

io.on('connection', function(socket) { 
    [...] 

    socket.on('Security:ImOn', function() { 
     var id = socket.id.split('#')[1]; 
     io.sockets.emit('Security:IsConnected', id); 
    }); 

    [...] 
}); 

Dieses Ereignis nur eine ID für alle Socket senden, damit sie wissen, dass diese neue Buchse eingeschaltet ist.

Der Fehler, den ich bekam, wenn das System versuchen, Sicherheit auszustrahlen: IsConnected:

Missing error handler on `socket`. 
TypeError: socket.packet is not a function 
at D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io-adapter\index.js:143:30 
at Encoder.encode (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io-adapter\node_modules\socket.io-parser\index.js:135:5) 
at Adapter.broadcast (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io-adapter\index.js:121:16) 
at Namespace.emit (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\namespace.js:219:18) 
at Socket.<anonymous> (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-security\src\AuthenticationController.js:30:24) 
at emitTwo (events.js:100:13) 
at Socket.emit (events.js:185:7) 
at Socket.onevent (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\socket.js:335:8) 
at Socket.onpacket (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\socket.js:295:12) 
at Client.ondecoded (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\client.js:193:14 
Missing error handler on `socket`. 
TypeError: socket.packet is not a function 
at D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io-adapter\index.js:143:30 
at Encoder.encode (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io-adapter\node_modules\socket.io-parser\index.js:135:5) 
at Adapter.broadcast (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io-adapter\index.js:121:16) 
at Namespace.emit (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\namespace.js:219:18) 
at Socket.<anonymous> (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-security\src\AuthenticationController.js:30:24) 
at emitTwo (events.js:100:13) 
at Socket.emit (events.js:185:7) 
at Socket.onevent (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\socket.js:335:8) 
at Socket.onpacket (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\socket.js:295:12) 
at Client.ondecoded (D:\Projets\Ecafa\ecafa-server\node_modules\ecafa-socket\node_modules\socket.io\lib\client.js:193:14) 

Ich verstehe nicht, warum mir diesen Fehler socket.io ziehen, io.sockets.emit() ist in der Dokumentation .

Kann mir jemand helfen?

Danke im Voraus für Hilfe und Beratung!

Cafa

+0

Vielleicht Sie Steckdose in 'ecafa-Sicherheit ändern \ src \ AuthenticationController.js' –

+0

Nö, enthalten AuthenticationController den io-Code. – Cafa

+0

Sie versuchen, an alle Clients zu senden, aber die ID von 1 Socket an die Funktion übergeben, ist das richtig? – pay

Antwort

1

Ok, ich löste das Problem.

Ich verstehe das Problem nicht vollständig, aber es funktioniert.

Hier ist, was ich verstehe:

  1. Mein Code nicht vollständig organisiert wurde. Im Moment gebe ich meinem Controller die volle Kontrolle über die Steckdose. Vorher können einige Versprechen ein Ereignis auf Socket auslösen.

  2. Meine Hierarchie des Ereignisses war auch nicht vollständig organisiert. Manchmal habe ich versucht, mehrere Ereignisse gleichzeitig auszulösen. Jetzt erhält jedes Ereignis einen Auftrag und kann nur einen ausgeben, das ist alles.

Es ist wirklich gut organisiert Veranstaltungen Sockel kompliziert, ich glaube, ich jeden Anruf und Antwort darüber im Klaren sein muß, und wo ich bin in meinem Fall.

Sorry, wenn mein Englisch ist wirklich schlecht, es ist nicht meine Sprache geboren: -/

Hoffe, es hilft.

Cafa