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