0

ネットワークとそれに関連するものについてより多くの知識を得るために、node.js を使用して簡単なゲームを構築しようとしています。しかし今、私は立ち往生しています。髪を伸ばして数時間ウェブを検索してきましたが、解決策が見つからないようです. path.js や mime.js などの便利なモジュールをいくつか見つけただけです。

私のサーバーのコードは次のようになります。

var http = require("http");
var host = "127.0.0.1";
var port = 3000;
var url = require('url');
var fs = require("fs");
var path = require("path");
var mime = require('mime');

var server = http.createServer(function(request, response) {
    console.log("Request received: " + request.url);
    fs.readFile(__dirname + '/game.html', function(error, data) {
        if (error) {
            response.writeHead(404, {"Content-type":"text/plain"});
            response.end("Sorry, the page was not found");
        } else {
            var holder = url.parse(request.url);
            var ext = path.extname(holder.pathname);
            response.setHeader('Content-type',"" + mime.lookup(ext));
            response.writeHead(200);
            response.end(data);
            if (ext == ".png") {
                response.setHeader('Content-type',"image/png");
                response.writeHead(200);
                response.end(data);
            } else if (ext == ".jpeg") {
                response.setHeader('Content-type',"image/jpeg");
                response.writeHead(200);
                response.end(data);
            }
        }
    });
});

var io = require('socket.io').listen(server);

サーバー変数が問題を引き起こしているようです。私が実装しようとしているゲームはここにあります: http://jsfiddle.net/6mWkU/2/ グラフィックを気にしないでください ;)

私のサーバーのコードでは、どの画像も提供されません。path.js と mime.js を使用しようとしたため、呼び出しごとに特定の Content-type が設定されましたが、機能しませんでした。

何が問題なのか、初心者を助けることができることを願っています。

4

1 に答える 1

0

あなたのサーバーは正しい方法で動作しません.リクエストごとにファイル「/game.html」のコンテンツを読み取ります(それを読み取ってキャッシュし、変更が加えられた場合にのみ更新できます)、各リクエストに応答します(! )チェックなしでhtmlファイルのコンテンツを使用し、リクエストの拡張子を確認した後(ただし、すでに応答されています)、それがtrueの場合は、応答に再度書き込みます(ここで、ノードのコンソールにいくつかのエラーが表示されるはずです)、書き込み可能なストリームに end after を書き込むことはできません。

私はあなたのために2つの解決策を持っています:

  1. // 難しい解決策

    /* Inside the createServer callback */
    if (request.url === '/') {
        // read the file and respond with html
    } else {
        if (/* check for the existence of the urls */) {
            // get the content of the file and respond with it's content and content-type
            // and don't forget to do this asynchronously!
        } else {
            // return 404
        }
    }
    
  2. // 簡単な解決策

    私のモジュールsimpleSを使用することをお勧めします。それはあなたのためにすべてを行います(!)。静的ファイルを提供し、websockets の機能を使用する機会を提供します。すべてのファイルを「静的」などのフォルダー内に配置してから、次のコードを使用します。

    var simples = require('simples');
    
    var server = simples(3000);
    
    server.get('/', function (connection) {
        connection.type('html');
        connection.drain(__dirname + '/game.html');
    });
    
    server.serve(__dirname + '/static');
    
    /*
      And that's all!
      To work with websockets read the documentation please
    */
    
于 2013-07-28T19:44:33.967 に答える