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);
});
}
".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和端口就可以使用你的网络程序了。