2012-03-30 4 views
39

Tôi tương đối mới đối với node.js và đó là phần bổ trợ, vì vậy đây có thể là câu hỏi bắt đầu.Kết nối máy khách với máy chủ bằng cách sử dụng Socket.io

Tôi đang cố gắng để có được một trang HTML đơn giản trên máy chủ web kết nối với một máy chủ khác đang chạy node.js với websocket.io.

Mã của tôi trông như thế này:

Khách hàng

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

Bắt đầu lên máy chủ hoạt động tốt và chạy http://localhost:8080 trong trình duyệt của tôi cũng làm việc, trở về 'Hello Socket Lover' như mong đợi. Nhưng tôi muốn làm cho một trang khác nói chuyện với các ổ cắm, không chạy một trang từ node.js.

Nhưng khi tôi chạy nó, không có gì xảy ra và giao diện điều khiển trở về Chrome:

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

Tôi đã ở đây cả ngày. Bất kỳ giúp đỡ?

Trả lời

34

Bạn đã thử tải tập lệnh socket.io không phải từ URL tương đối chưa?

Bạn đang sử dụng:

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

Và:

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

Bạn nên thử:

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

Và:

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

Chuyển đổi localhost:8080 với bất kỳ thứ gì phù hợp với thiết lập hiện tại của bạn.

Ngoài ra, tùy thuộc vào thiết lập của bạn, bạn có thể gặp một số sự cố khi kết nối với máy chủ khi tải trang khách hàng từ một miền khác (chính sách cùng nguồn gốc). Điều này có thể được khắc phục theo những cách khác nhau (ngoài phạm vi của câu trả lời này, google/SO nó).

10

Bạn cần phải chắc chắn rằng bạn thêm dấu gạch chéo lên trước liên kết của bạn để socket.io:

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

Sau đó, trong giao diện/điều khiển chỉ cần làm:

var socket = io.connect() 

Điều đó sẽ giải quyết vấn đề của bạn .

+9

'var socket = io()' –