4

ローカル クライアントで単純な socket.io の例をテストしようとしています。これが私のコードです:

サーバ:

var sio = require('socket.io');
var io = sio.listen(8077, {log: false});

io.sockets.on('connection', function (socket) {
    console.log('connection detected');
    socket.on('hello', function(data){
        console.log('hello received: ' + data);
    });
});

クライアント:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <script src="socket.io-client/dist/socket.io.js" type="text/javascript"></script>
  </head>
  <body>
    <script type="text/javascript">
      var socket = io.connect('http://localhost:8077');
      if(socket != undefined){
          socket.emit('hello', 'this is a test');
      }
    </script>
  </body>
</html>

クライアントをリモート サーバーに置くと問題なく動作しますが、クライアントをローカルから実行しようとすると、ブラウザーに次のエラーが表示されます。

XMLHttpRequest cannot load http://localhost:8077/socket.io/1/?t=1343494806858.
Origin null is not allowed by Access-Control-Allow-Origin

http サーバーでこの問題を解決する http ヘッダーがあることは知っていますが、ソケット コンテキストに同様のオプションがあるかどうかはわかりません。ローカル クライアントが必要です。追加の http nodejs サーバーからクライアント コードを提供したくありません。

4

1 に答える 1

4

サーバーの起点パラメーターを設定しようとしましたか (それはあなたが言及したヘッダーを設定します)?:

var sio = require('socket.io');
var io = sio.listen(8077, {log: false, origins: '*:*'});

また、そのサーバーにローカルでアクセスしていない場合は、次の行を更新してください。

var socket = io.connect('http://localhost:8077');

リモートサーバーのIP(またはドメインがある場合はドメイン)を含めるには:

var socket = io.connect('http://XX.XX.XX.XX:8077');

コンソールでエラーを返す行を確認できますか (firebug で chrome/ff を使用していますか?)。if ステートメントでは、ソケット変数が未定義になることはおそらくないでしょう。接続を使用するための推奨される方法は、接続イベントにコールバックをアタッチして準備が整うまで待機することです。次に例を示します。

socket.on('connect', function () {  // <-instead of the if
    socket.emit('hello', 'this is a test');
}
于 2012-07-28T17:31:31.787 に答える