3

https://github.com/mrdoob/three.js/wiki/How-to-run-things-locallyは、three.js の例がローカル サーバーによって提供されることを示唆しています。python SimpleHTTPServerは、three.js リポジトリ クローンのサンプルディレクトリの上のディレクトリで実行する必要があることを除いて、私にとっては問題なく動作します。

今、node.js で httpServer を使用して同じ例を提供しようとしています。SimpleHTTPServer のノード バージョンの 1 つを使用できますが、socket.io を介してサーバーから webgl ブラウザーの例にデータを渡すには、httpServer オブジェクトが必要です。そこで、socket.io の例を取り上げ、上記のディレクトリの node を使用して次のserver.jsを実行しようとしましたexamples

var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')

app.listen(8080);

function handler (req, res) {
  fs.readFile(__dirname + '/examples/webgl_interactive_voxelpainter.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

ネットは、ノードで 127.0.0.1:8080 に three.js の例が表示されないことです。socket.io へのすべての参照を削除しても、コードは機能しません。これは、html に関するものであることを示しています。

  1. 私は何が欠けていますか?コールバックエラーが発生しないため、html ファイルは正しく読み取られています。

  2. 私は、Python サーバーがディレクトリをブラウザーの html リンクとしてリストしていることに気付きました。サンプルをクリックして html ファイルを表示し、次に html ファイルをクリックすると正常に動作します。そこで、「node server.js」を 1 つ上のディレクトリ レベルで実行してみました。フォワード スラッシュとバック スラッシュ、ルート ディレクトリ参照のほぼすべての組み合わせを使用して...無駄にしました。

  3. 私は純粋な httpServer にとらわれていません。Express か何かが socket.io と three.js で動作する場合は、その列車に乗ります。

4

1 に答える 1

2

接続フレームワークを使用すると、作業が簡単になります。

var connect = require('connect');

var app = connect()
   .use(connect.static('<your directory>'))
   .use(function(req, res){
     res.end();
   })
   .listen(8080);

http://www.senchalabs.org/connect/

https://github.com/senchalabs/connect

于 2012-09-20T11:14:13.310 に答える