socket.on ('connection' ... событие никогда не вызывало nodejs + express + socket.io - PullRequest
12 голосов
/ 08 декабря 2011

Проблема socket.io НЕ работает

Подробности

  • Создан проект с express [folder]; cd [folder]; npm install;
  • Настройка socket.io npm install socket.io
  • Запустить приложение узла с кодом ниже
  • Клиент connect Событие запускается, но сервер соединение НИКОГДА не срабатывает.

Настройка

  • Сервер Уровень бесплатного пользования AWS, Ubuntu 11.10, ami-a7f539ce
  • nodejs v0.6.5
  • express v2.5.1
  • socket.io v0.8.7

Клиент

 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');
 });

Сервер

 [...]

 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);           
 });

Почему событие connection никогда не срабатывает?

Ответы [ 3 ]

12 голосов
/ 08 декабря 2011

Потребовалось время, чтобы заметить ... событие connection выдается на io.sockets. В вашем коде это будет

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

Вам следует использовать io вместо socket в качестве имени переменной, чтобы избежать этой путаницы.

1 голос
/ 02 апреля 2014

Следующие действия помогли мне с: socket.io-client: "^ 0.9.16"

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

Теперь событие 'connect' срабатывает последовательно, и повторное использование отсутствует.

Я выяснил эту опцию, изучив строку socket.io-client / lib / io.js: 192 Поскольку я даже не могу найти этот файл io.js в github, я думаю, что в будущих версиях есть рефакторинг,эта опция может не работать.

По крайней мере, это может быть полезно для кого-то, кто возьмется за эту временную работу.

1 голос
/ 23 июня 2013

Рикардо Томази правильно, спас мне жизнь, я сходил с ума.

Несмотря на то, что все изменилось, мы находимся в 2013 году, еще есть проблема (с 2 года) по этому

вероятно, что-то изменилось, во всяком случае, чтобы зарегистрировать событие 'connect', я должен был сделать это:

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;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...