在自己的电脑上搭建一个服务器,有很多方法例如常用的iis、wasp,今天我来分析一下node.js服务器呢?理由一,node.js服务器有各种好处,包括单线程带来的性能优化,想了解深入推荐《 了不起的Node.js》,很多大公司已经开始使用部分node服务器;理由二,对于Unity程序员来说,基于ECMAScript衍生出的各种js技术都有很强的共同性,换句话说就是容易懂好上手,尤其是有JS基础的开发者,分享给大家。
第一步:我们首先用Unity发布一个web包,因为最新的unity3d早已经不支持webplayer,这似乎也是未来浏览器"去插件化"的趋势,这里我打包一个WebGL测试版放在碗里备用,如下图
第二步:我们编写Node.js服务器文件Cart.js,首先我们导入联网模块模块、IO模块等等,其中的./mine代表导入一个定义在根目录的mine模块,里面是输出类型类似与IIS服务器的MIME配置。
var http = require('http');
var url = require('url');
var fs = require('fs');
var mine = require('./mine').types;//
var path = require('path');
第三步:http模块导入之后,直接http.createServer就很容易创建一个服务器代码如下:
var server = http.createServer(function (request, response)
{
var pathname = url.parse(request.url).pathname;
});
server.listen(3000);
第四部:创建路由,用正则表达式让URL正确的指向目标
//路由
if (pathname == "/") {
file('index.html');
}
else {
file(pathname.replace("/", ""));
}
第五步:读取文件,并response
function file(filepath) {
var ext = path.extname(filepath);
ext = ext ? ext.slice(1) : 'unknown';
fs.exists(filepath, function (exists)
{
if (!exists)
{
response.writeHead(404, {
'Content-Type': 'text/plain'
});
response.write("This request URL " + pathname + " was not found on this server.");
response.end();
}
else {
fs.readFile(filepath, "binary", function (err, file) {
if (err) {
response.writeHead(500, {
'Content-Type': 'text/plain'
});
response.end(err);
} else {
var contentType = mine[ext] || "text/plain";
response.writeHead(200, {
'Content-Type': contentType
});
response.write(file, 'binary');
response.end();
}
});
}
});
}
完成,是不是挺简单,第六步:我们先把WebGL文件放在Node.js服务器里,再来运行服务器:①打开node.js的根目录,按住键盘Shift键,在目录空白处点击右键,②在弹出的菜单里点击“在此处打开命令窗口",③之后再打开的命令窗口中输入:node Cart(注:Cart.js是服务器文件名,后缀可省略)