关于unity3d发布webgl使用nodejs做服务器的实践

3d应用程序跑在浏览器上是一种不可阻挡的趋势,这方向的需求也越来越多,前一段时间发布了一个网页版的实验大厅,用自己电脑发布到iis一点问题没有,但在服务器上测试都不能实现,最后没办法,在外网的客户要看,也只能让iT做端口映射到我这台电脑了。

最近发现其实这种小程序,没有很强大的后台系统,一个简单的nodejs服务器就可以实现我的所有需求了。说是服务器有点高了,其实也就是一个脚本,在实践过程中也发现了为什么在其他iis服务器上没办法测试成功的问题所在---(assetbundle包没有设置后缀,面“.*”对应的类型也没办法解析这类文件,可能直接就当成文件夹处理了)

下面来实现一个吧:

一、安装nodejs服务端程序

https://nodejs.org/en/download/

进去按对应的平台下载好了再安装到本机,安装完成后可可以直接用命令行的方式来运行你所写的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和端口就可以使用你的网络程序了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值