2012-04-17 1 views
1

Я установил сервер Ubuntu 10.04 в своей домашней сети. Я установил на нем сервер лампы, NodeJs и Socket.io. Кажется, все работает нормально, но я не могу установить соединение с моим клиентом на сервер. Я думаю, что мне не хватает места для хранения файлов клиента и/или того, как IP-адрес и порт должны быть помещены в код.NodeJS + Socket.io: клиент не будет подключаться к серверу Ubuntu в homenetwork

Я использую пример от Дэвида Уолша (http://davidwalsh.name/websocket). Мой ip-адрес сервера - 192.168.1.113. На клиенте я храню app.js в

/USR/местные/бен

То есть, где узел установлен как дост.

Серверный код

// Require HTTP module (to start server) and Socket.IO 
var http = require('http'), io = require('socket.io'); 

// Start the server at port 8000 
var server = http.createServer(function(req, res){ 

// Send HTML headers and message 
res.writeHead(200,{ 'Content-Type': 'text/html' }); 
res.end('<h1>Hello Socket Lover!</h1>'); 
}); 
server.listen(8000); 

// Create a Socket.IO instance, passing it our server 
var socket = io.listen(server); 

// Add a connect listener 
socket.on('connection', function(client){ 

// Success! Now listen to messages to be received 
client.on('message',function(event){ 
console.log('Received message from client!',event); 
    }); 
client.on('disconnect',function(){ 
clearInterval(interval); 
console.log('Server has disconnected'); 
}); 

}); 

При запуске сервера с узлом и введите адрес в браузере (http://192.168.1.113:8000) Я вижу "Привет Оправа Lover! поэтому я думаю, это работает отлично.

Я храню клиента файл (client.html) в

/вар/WWW

Вот где домашняя папка моего ЛАМПЫ сервера.

Client.html

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 

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

<script> 
// Create SocketIO instance, connect 
var socket = new io.Socket('http://192.168.1.113',{ 
    port: 8000 
}); 
socket.connect(); 

// Add a connect listener 
socket.on('connect',function() { 
    console.log('Client has connected to the server!'); 
}); 
// Add a connect listener 
socket.on('message',function(data) { 
    console.log('Received a message from the server!',data); 
}); 
// Add a disconnect listener 
socket.on('disconnect',function() { 
    console.log('The client has disconnected!'); 
}); 

// Sends a message to the server via sockets 
function sendMessageToServer(message) { 
    socket.send(message); 
} 

</body> 
</html> 

Теперь, когда я открываю этот файл в браузере (http://192.168.1.113/client.html) ничего не происходит. Я не вижу связи на моем сервере Ubuntu или других журналах, и в браузере нет сообщений.

Эмм ... что я делаю неправильно? Я пробовал часами, меняя все виды вещей, но все равно никакого результата.

+0

Вы открыли порт 8000 с сервера Ubuntu, так что вы можете сделать подключение к нему? – pmavik

+0

Благодарим вас за помощь. Я попытался открыть и закрыть порты, используя ufw.Когда я закрываю порт, сообщение «Hello Socket Lovers» не отображается. Когда я открываю его снова, он показывает сообщение, поэтому я не думаю, что это проблема портов. –

+0

В вопросе тега отсутствует файл client.html. Я тоже добавляю это, но никакого результата. –

ответ

2

С помощью pmavik (см. Комментарии) на мой вопрос отвечает.

Я не знал, как правильно обслуживать файл клиента (index.html). Я скопировал пример с сайта www.socket.io, добавил правильный ip-адрес и порт, и теперь соединение выполнено.

Файл сервера (app.js) и файл клиента (index.html) должны находиться в каталоге, где установлен узел. Node-сервер отправляет клиентский файл в браузер, поэтому нет необходимости помещать файл клиента в каталог/var/www, где есть «нормальные» файлы для веб-сайтов.

app.js

var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(8000); 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
    if (err) { 
     res.writeHead(500); 
     return res.end('Error loading index.html'); 
     } 

    res.writeHead(200); 
    res.end(data); 
    }); 
} 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

index.html

<html> 
<head></head> 
<body> 
<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://192.168.1.113:8000'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 
</body> 
</html> 
+0

Я обнаружил, что файл index.html можно хранить в каталоге/var/www. Источник socket.io.js должен быть: . Тогда все работает так, как должно. Не нужно больше отправлять файл index.html. –

+0

Приятно слышать, что у вас это работает! – pmavik

Смежные вопросы