2012-03-30 8 views
39

を使用してサーバーにクライアントを接続します。は、私がNode.jsのに比較的新しいですし、それはアドオンですので、これはおそらくbeginnersquestionあるSocket.io

私はウェブサーバwebsocket.ioでのNode.jsを実行している別のサーバーに接続するには、単純なHTMLページを取得しようとしています。

クライアント

<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> 

サーバーサイド

// 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

はあなたがいない相対URLからsocket.ioスクリプトをロードしようとしたことがありますか?

あなたは使用している:

<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ソケット= IO()' –

関連する問題