2012-03-30 4 views
39

Я относительно новичок в node.js, и это аддоны, так что это, вероятно, новичок.Подключение клиента к серверу с использованием Socket.io

Я пытаюсь получить простую HTML-страницу на веб-сервере, подключающуюся к другому серверу, на котором выполняется node.js с websocket.io.

Мой код выглядит следующим образом:

Client

<script src="socket.io/socket.io.js"></script> 
<script> 
    // Create SocketIO instance, connect 

    var socket = new io.Socket(); 

    socket.connect('http://127.0.0.1:8080'); 

    // 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); 
    }; 
</script> 

Serverside

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

// Start the server at port 8080 
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(port); 

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

// Add a connect listener 
socket.on('connection', function(client){ 
    console.log('Connection to client established'); 

    // 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'); 
    }); 
}); 

console.log('Server running at http://127.0.0.1:' + port + '/'); 

Запуск сервер работает отлично и работает http://localhost:8080 в мой браузер работает, возвращаясь «Hello Socket Lover», как и ожидалось. Но я хочу, чтобы другая страница разговаривала с сокетами, а не запускала ее из node.js.

Но когда я запускаю его, ничего не происходит, и консоль возвращается Chrome:

Failed to load resource   http://undefined/socket.io/1/?t=1333119551736 
Failed to load resource   http://undefined/socket.io/1/?t=1333119551735 

Я был на этом в течение всего дня. Любая помощь?

ответ

34

Вы пытались загрузить сценарий socket.io не с относительного URL-адреса?

Вы используете:

<script src="socket.io/socket.io.js"></script> 

И:

socket.connect('http://127.0.0.1:8080'); 

Вы должны попробовать:

<script src="http://localhost:8080/socket.io/socket.io.js"></script> 

И:

socket.connect('http://localhost:8080'); 

Переключатель localhost:8080 с любой настройкой текущей настройки.

Кроме того, в зависимости от вашей установки могут возникнуть проблемы с подключением к серверу при загрузке клиентской страницы из другого домена (политика одного происхождения). Это можно преодолеть по-разному (вне сферы действия этого ответа, google/SO it).

10

Вы должны убедиться, что вы добавляете слеш перед вашей ссылки Socket.io:

<script src="/socket.io/socket.io.js"></script> 

Тогда в представлении/контроллер просто сделать:

var socket = io.connect() 

Это должно решить вашу проблему ,

+9

'var socket = io()' –

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