Socket.io - ошибка: socket.packet не является функцией

Я пытаюсь передать событие во все сокеты, но я получил ошибку, которую не понимаю.

Код довольно прост:

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

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

    [...]
});

Это событие просто отправляет идентификатор всем сокетам, чтобы они знали, что этот новый сокет включен.

Ошибка, которую я получил, когда система пытается выдать Security: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)

Я не понимаю, почему socket.io тянет меня за этой ошибкой, io.sockets.emit() есть в документации.

Кто-нибудь может мне помочь?

Спасибо заранее за помощь и совет!

CAFA

1 ответ

Хорошо, я решил проблему.

Я не до конца понимаю проблему, но она работает.

Вот что я понимаю:

  1. Мой код не был полностью организован. На данный момент я даю полный контроль над сокетом для моего контроллера. Раньше некоторые обещания могли запускать событие в сокете.

  2. Моя иерархия событий тоже не была полностью организована. Иногда я пытался запустить несколько событий одновременно. Теперь каждое событие получает один заказ и может запустить только один излучатель, вот и все.

Это действительно сложно, чтобы хорошо организовать Event Socket, я думаю, что я должен знать о каждом вызове и ответе, и где я нахожусь в моем мероприятии.

Извините, если мой английский действительно плохой, это не мой родной язык:-/

Надеюсь, это поможет.

CAFA

Другие вопросы по тегам