Событие соединения Socket.IO Node.JS не запускается

Я, должно быть, делаю что-то невероятно глупое, так как пример учебного (!) Чата на http://socket.io/get-started/chat/ для Node.JS и Socket.IO не работает для меня. В частности, событие "соединение" не запускается при загрузке веб-страницы.

Это полный index.js:

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){
  console.log('a user connected');
});

http.listen(3000, function(){
  console.log('1e listening on *:3000');
});

Это полный index.html:

<!doctype html>
<html>
  <head>
    <title>1e Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
  </head>
  <body>
    <script src="/socket.io/socket.io.js"></script>
    <script>
      var socket = io.connect('http://X.YY.ZZZ.QQ:3000');
      socket.on('message', function(msg){
        console.log(msg);
        document.getElementById("message").innerHTML = msg;
      });
    </script>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
  </body>
</html>

Информация о брандмауэре:

  • На X.YY.ZZZ.QQ:3000 я отключил брандмауэр (да, быстрый и уродливый временный взлом, чтобы избежать тайм-аута и загрузить страницу, пока я не выясню, как правильно настроить правила iptables) через service iptables stop
  • На локальном компьютере с Windows я могу легко получить доступ к X.YY.ZZZ.QQ через ssh, и брандмауэр также отключен в Windows, поэтому я предполагаю, что порт не должен быть проблемой здесь

Что работает:

  • Клиент: Я могу получить доступ к X.YY.ZZZ.QQ:3000 через InternetExplorer, и он отображает панель чата с кнопкой Отправить.
  • Я точно знаю, что index.html - это загружаемый файл, так как я продолжаю постепенно менять тег заголовка ("1e") при каждом изменении в html-файле.
  • Сервер: на выходе консоли отображается * "1e listen on .3000" при запуске с помощью команды./node index.js
  • Я также продолжаю постепенно менять версию ("1e"), чтобы убедиться, что файл node.js правильный

Что не работает:

  • Я должен получить консольное сообщение " пользователь подключен " при (пере) загрузке вкладки веб-страницы, но она не срабатывает. Я поместил точку останова в код HTML в строке var socket = io.connect (), и она действительно выполнила строку, поэтому похоже, что socket.io загружается

Есть ли коды ошибок? Как вы решаете проблемы Node.JS/Socket.IO? Любые внутренние журналы? Я посмотрел, но не видел ни одного.

Я почти уверен, что пренебрег чем-то невероятно примитивным, но, поскольку эта веб-технология является новой для меня (я в основном парень на C/C++), я заблудился. Есть идеи?

0 ответов

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