Простой пример NodeJS, с которым не работает socket.io

#node.js #socket.io

#node.js #socket.io

Вопрос:

Весь день боролся, пытаясь заставить этот простой пример работать с использованием socket.io . Я пробовал изначально в Windows 7 с Cygwin. С тех пор также пробовал на OS X, с тем же результатом.

При запуске скрипта он показывает это…

 2 May 20:57:47 - socket.io ready - accepting connections
  

Но посещение index.html страница не показывает, что клиент даже подключился.

index.html

 <html>
<head>
<script type="text/javascript" src="socket.io.js"></script> 
<script type="text/javascript"> 
    var socket = new io.Socket('localhost',{'port':8090});

    socket.connect();

    socket.on('connect', function(){
        console.log('connected');
        socket.send('hi!'); 
    });

    socket.on('message', function(data){ 
        console.log('message recived: '   data);
    });

    socket.on('disconnect', function(){
        console.log('disconected');
    });
</script> 
</head>
<body></body>
</html>
  

server.js

 var http = require('http'), io = require('socket.io'),

server = http.createServer(function(req, res){ 
    res.writeHead(200, {'Content-Type': 'text/html'}); 
    res.end('<h1>Hello world</h1>'); 
});
server.listen(8090);

var socket = io.listen(server); 
socket.on('connection', function(client){ 
    console.log('client connected');

    client.on('message', function(){ 
        console.log('message arrive');
        client.send('some message');
    });

    client.on('disconnect', function(){
        console.log('connection closed');
    });
});
  

Есть идеи о том, что я мог делать неправильно? Никакие сообщения консоли вообще не отображаются. Примечательно, что когда я использую Firebug для просмотра index.html страница, скрипты не внедряются, что странно .. Не уверен, что может быть причиной этого.

Ответ №1:

Вы не загружаете сокет.библиотека ввода-вывода должным образом в вашем index.html файл. Попробуйте это:

 <script type="text/javascript" src="http://localhost:8090/socket.io/socket.io.js"></script> 
  

Комментарии:

1. 1, правильный и лучший способ, чем получение скрипта с удаленного хоста.

Ответ №2:

Вы не обслуживаете socket.io.js (или с файлом flash).

Я бы порекомендовал использовать CDN:

<script src="http://cdn.socket.io/stable/socket.io.js"></script>

или альтернативно используйте express для обслуживания socket.io.js файл.

Редактировать:

ошибка на самом деле, если присмотреться, вы также не обслуживаете index.html опять же, express мог бы работать, но для простого примера:

 var fs = require('fs');
var index = fs.readFileSync('index.html');
//note the readFileSync is done only in the first tic
.
.
.
res.writeHead(200, {'Content-Type': 'text/html'}); 
res.end(index); 
  

Комментарии:

1. На самом деле существуют некоторые проблемы с использованием версии CDN.. для меня websockets не работал.. Я бы посоветовал придерживаться локальной версии

2. Ах, вот оно что! Изначально я использовал express, но вернулся к http, чтобы изолировать проблему. Я вернулся к express и начал использовать функцию app.configure (‘разработка’). Спасибо за вашу помощь!

Ответ №3:

Используйте это на стороне клиента в качестве пути!

 <script type="text/javascript" src="/socket.io/socket.io.js"></script> 
  

Ответ №4:

да, и прокомментируйте следующую строку:

 // server.listen(8090);