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 ответ
Хорошо, я решил проблему.
Я не до конца понимаю проблему, но она работает.
Вот что я понимаю:
Мой код не был полностью организован. На данный момент я даю полный контроль над сокетом для моего контроллера. Раньше некоторые обещания могли запускать событие в сокете.
Моя иерархия событий тоже не была полностью организована. Иногда я пытался запустить несколько событий одновременно. Теперь каждое событие получает один заказ и может запустить только один излучатель, вот и все.
Это действительно сложно, чтобы хорошо организовать Event Socket, я думаю, что я должен знать о каждом вызове и ответе, и где я нахожусь в моем мероприятии.
Извините, если мой английский действительно плохой, это не мой родной язык:-/
Надеюсь, это поможет.
CAFA