Событие соединения 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++), я заблудился. Есть идеи?