Пример из сокета.IO 1.4.3 docs выдает ошибку

#node.js #socket.io #socket.io-1.0

#node.js #socket.io #socket.io-1.0

Вопрос:

Я пытался выполнить этот простой первый пример из сокета.Документация по вводу-выводу, которая, похоже, не работает ни в одном из способов, которые я пробовал.

Вот мой код:

 var io = require('socket.io');
io.listen(server);

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
  

И ниже приведен журнал ошибок:

 /home/chetan/project/app.js:70
io.on('connection', function (socket) {
   ^
TypeError: Object function Server(srv, opts){
  if (!(this instanceof Server)) return new Server(srv, opts);
  if ('object' == typeof srv amp;amp; !srv.listen) {
    opts = srv;
    srv = null;
  }
  opts = opts || {};
  this.nsps = {};
  this.path(opts.path || '/socket.io');
  this.serveClient(false !== opts.serveClient);
  this.adapter(opts.adapter || Adapter);
  this.origins(opts.origins || '*:*');
  this.sockets = this.of('/');
  if (srv) this.attach(srv, opts);
} has no method 'on'
    at Object.<anonymous> (/home/chetan/project/app.js:70:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
  

Я пару минут просматривал журналы, но, похоже, не могу понять, что не так.

Я даже пытался использовать его таким образом:

 io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
  

Которая генерирует следующую ошибку:

 io.sockets.on('connection', function (socket) {
           ^
TypeError: Cannot call method 'on' of undefined
    at Object.<anonymous> (/home/chetan/project/app.js:70:12)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:902:3
  

Как вы думаете, что может быть не так?

Ответ №1:

Просто решил проблему, немного просмотрев веб-страницы.

Я только что выяснил, что шаблон проектирования, который я использую, отличается от их. Когда сокет.io прослушивает сервер, он возвращает объект, который должен использоваться для связи.

Вот рабочий фрагмент кода, например:

 var io = require('socket.io');
var websocket = io.listen(server);

websocket.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});
  

Кроме того, вы можете использовать следующий способ для кодирования логики вашего сервера websocket в отдельном файле. Предполагая, что имя файла является websocketProcessor.js , вот код:

 var io = require('socket.io');
var websocket = io.listen(server);

require('./websocketProcessor')(websocket);