Подключение клиента к серверу с помощью Socket.io - PullRequest
46 голосов
/ 30 марта 2012

Я относительно новичок в node.js и его дополнениях, так что, возможно, это вопрос новичка.

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

Мой код выглядит так:

Клиент

<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

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

Ответы [ 2 ]

40 голосов
/ 30 марта 2012

Вы пытались загрузить скрипт 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 это).

14 голосов
/ 31 марта 2012

Необходимо убедиться, что вы добавляете косую черту перед ссылкой на socket.io:

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

Затем в представлении / контроллере просто выполните:

var socket = io.connect()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...