1. 程式人生 > >關於unity3d釋出webgl使用nodejs做伺服器的實踐

關於unity3d釋出webgl使用nodejs做伺服器的實踐

3d應用程式跑在瀏覽器上是一種不可阻擋的趨勢,這方向的需求也越來越多,前一段時間釋出了一個網頁版的實驗大廳,用自己電腦釋出到iis一點問題沒有,但在伺服器上測試都不能實現,最後沒辦法,在外網的客戶要看,也只能讓iT做埠對映到我這臺電腦了。

最近發現其實這種小程式,沒有很強大的後臺系統,一個簡單的nodejs伺服器就可以實現我的所有需求了。說是伺服器有點高了,其實也就是一個指令碼,在實踐過程中也發現了為什麼在其他iis伺服器上沒辦法測試成功的問題所在---(assetbundle包沒有設定字尾,面“.*”對應的型別也沒辦法解析這類檔案,可能直接就當成資料夾處理了)

下面來實現一個吧:

一、安裝nodejs服務端程式

進去按對應的平臺下載好了再安裝到本機,安裝完成後可可以直接用命令列的方式來執行你所寫的js程式碼了

二、寫一個靜態檔案node伺服器

/**
 * Created by Danny on 2015/9/20 9:34.
 */
var http = require("http");
var fs = require("fs");
var url = require("url");
var path = require("path");

var server = http.createServer(function(req,res){
    //解析url路徑,獲取路徑名
    var pathname = url.parse(req.url).pathname;
    //空路徑為入口頁面(unity打包出來也就這一個頁面面已經)
    if(pathname == "/"){
        pathname = "index.html";
    }
    //指定檔案路徑(這裡放在執行指令碼同級的名叫static的資料夾中)
    var fileURL = "./" + path.normalize("./static/" + pathname);
    //得到拓展名
    var extname = path.extname(pathname);

    //發現客戶端程式請求的檔案路徑console.log("fileURL:" + fileURL);

    //讀檔案
    fs.readFile(fileURL,function(err,data){
        if(err){
            //檔案不存在
            res.writeHead(404,{"Content-Type":"text/html;charset=UTF8"})
            res.end("404,請求檔案不存在:" + fileURL);
        }
      //返回對應的資料
        getMime(extname,function(mime){
            res.writeHead(200,{"Content-Type":mime})
            res.end(data);
 console.log("extname:" + extname);
        });
    });
});

//這裡寫伺服器ip,預設是80埠
server.listen(80,"10.0.0.51");

function getMime(extname,callback){
    fs.readFile("./mime.json",function(err,data){
        if(err){
            throw Error("找不到mime.json:" + extname);
            return;
        }
        //轉成JSON物件
        var mimeJSON = JSON.parse(data);
        var mime =  mimeJSON[extname]  || "text/plain";
        //執行回撥函式
        callback(mime);
    });
}

三、在mime.json資料夾中新增unity3d釋出webgl後需要的型別

".memgz":"application/octet-stream",
  ".datagz":"application/octet-stream",
  ".unity3dgz":"application/octet-stream",
  ".jsgz":"application/x-javascript; charset=UTF-8",
".*":"application/octet-stream"

四、執行測試

如果沒有伺服器,那就在本機測試吧,打ip改成127.0.0.1。

將打包成的webgl檔案全部放入static資料夾中,此時萬事俱備

在cmd模式下,cd到服務端指令碼js所在的目錄,然後寫入node **,(**指指令碼名,不加js),按回車

游標閃碩沒有報錯就說明服務端啟動成功了

要訪問你的應用程式,可在本機firefox或者chome等支援webgl高階特性的瀏覽器中寫你的ip和埠就可以使用你的網路程式了。