基于Node.js和Cocos Creator的开发 【一,实现http通信】

一,开发环境及前言

本示例开发环境如下:

  • macOS High Sierra 版本10.13.4

  • nodejs v10.6.0

  • Cocos Creator V2.0

  • Code V1.25.1

JavaScript最初只能用于网页的前端开发,Node.js推出之后,JavaScript可以进行后端开发了,cocos2d-js、Cocos Creator、微信小程序使得JavaScript能够直接进行游戏开发,Electron可以方便的把JavaScript开发的应用发布成跨平台的桌面应用,开源库TensorFlow.js更是将JS扩展到热门的机器学习领域。
JavaScript的引用领域原来越广泛了,大有一统江湖之势:

  • 网页开发
  • 服务器开发
  • 手游开发
  • 桌面应用
  • 机器学习领域

在功能机时代,缺少游戏引擎的支持,UI使用硬编码方式进行部署,在产品改变UI、调整数值时都要重新编码,只有打包放到手机上才能看到产品效果。这些工作都需要程序员来操作。Cocos Creator是以内容创作为核心的游戏开发工具,其包含游戏引擎、资源管理、场景编辑、游戏预览和发布等游戏开发所需的全套功能,并且将所有的功能和工具链都整合于一体,为美术和策划人员提供前所未有的内容创作生产和即时预览测试环境。以工作流为核心的开发理念,让不同职能的开发者能够快速找到最大化自己作用的工作切入点,并能够默契流畅的和团队其他成员配合。

二,使用node.js创建http服务

node.js使用Code工具开发,新建一个文件夹:Server,导入到Code开发环境中。
在Server工程目录下新建httpServer.js,写入以下代码:

const http = require('http');
http.createServer(function(req, res) {
        var response = 'Hello World';
        res.write(response);
        res.end();
}).listen(8181);

第一行代码引入需要的模块,第三代码使用http模块提供的接口建立一个监听8181端口的http服务。
从命令行启动服务:
node httpServer.js
在浏览器中输入http://127.0.0.1:8181,我们就可以看到这个画面了:

01.png

三,手机端http访问实现

使用Cocos Creator新建一个项目,组织目录结构,示例如下:

02.png

http请求接口的实现

Cocos Creator支持Web平台上最广泛使用的标准网络接口:

  • XMLHttpRequest:用于短连接
  • WebSocket:用于长连接
    我们使用XMLHttpRequest实现手机端的http服务请求,在http.js文件中写下如下代码:
module.exports = {
    request: function(obj) {
        var httpRequest = new XMLHttpRequest();
        var time = 5*1000;
        var timeout = false;

        // 超时设置
        var timer = setTimeout(function(){
            timeout = true;
            httpRequest.abort();
        }, time);

        var url = obj.url;

        // 组织请求参数
        if (typeof obj.data == 'object') {
            console.info('obj.data=' + JSON.stringify(obj.data));
            var kvs = []
            for (var k in obj.data) {
               kvs.push(encodeURIComponent(k) + '=' + encodeURIComponent(obj.data[k]));
            }
            url += '?';
            url += kvs.join('&');
        }

        httpRequest.open(obj.method?obj.method:'GET', url, true);
        
        httpRequest.onreadystatechange = function () {
            var response = httpRequest.responseText;
            console.info('http url cb:' +  url + ' readyState:' + httpRequest.readyState + ' status:' + httpRequest.status);
            clearTimeout(timer);

            if (httpRequest.readyState == 4) {
                console.info('http success:' + url + ' resp:' + response);
                if (typeof obj.success == 'function') {
                    obj.success(response);
                }
            } else {
                console.info('http fail:' + url);
                if (typeof obj.fail == 'function') {
                    obj.fail(response);
                }
            }
        };
        httpRequest.send();
    }
}

参数说明:obj为一个JSON结构体,需要包含url键,data做为可选键,data的值需要为一个字典。

http请求接口的调用
在HelloWorld.js文件首行添加:
var http = require('http');
实现如下函数:

httpRequest: function() {
    var obj = {
        'url' : 'http://127.0.0.1:8181/'
    }
    http.request(obj);
}

在onLoad中调用函数:
this.httpRequest();
此时可以看到控制台中的输出:

03.png

四,前后端数据交换格式

本示例中使用JSON作为前后端数据交换格式,JSON是一种采用完全独立于编程语言的文本格式来存储和表示数据的轻量级的数据交换格式。
前端在请求时已经采用JSON格式,接下来把后端传递回来的数据修改成JSON格式:
将httpServer.js中的数据响应:

var response = 'Hello World';
res.write(response);

修改为:

var response = {
    'info' : 'Hello world'
};
res.write(JSON.stringify(response));

将Cocos Creator中的http.js中的数据解析:

if (httpRequest.readyState == 4) {
    console.info('http success:' + url + ' resp:' + response);
    if (typeof obj.success == 'function') {
        obj.success(response);
    }
}

修改为:

if (httpRequest.readyState == 4) {
    console.info('http success:' + url + ' resp:' + response);
    var resJson = JSON.parse(response);
    if (typeof obj.success == 'function') {
        obj.success(resJson);
    }
}

再次启动服务,前端发起请求,获取到的数据如下:


04.png

五,页面上显示接收到的数据

接下来我们把从后端接收到的数据显示到HelloWorld场景上。
在场景上添加:

  • 一个发送请求的按钮,点击此按钮调用httpRequest方法,同事将httpRequest的调用从onLoad函数去除。
  • 创建一个lable用以显示后端获取的数据,将其和代码关联;
    如图:


    05.png

    修改HelloWorld.js中的代码:

var obj = {
    'url' : 'http://127.0.0.1:8181/'
}

修改为:

var obj = {
    'url' : 'http://127.0.0.1:8181/',
    'success' : function(jsonData) {
        this.responstData.string = jsonData['info'];
    }.bind(this)
}

其中this.responstData指向上一步创建的显示获取后端数据的标签的变量。
运行,点击“发送请求”按钮,可以得到如下画面:

06.png

至此我们完成了http服务的请求和回应功能。


代码在这儿


参考
http://docs.cocos.com/creator/manual/zh/getting-started/introduction.html
http://nodejs.cn/api/http.html#http_http_createserver_options_requestlistener


下一篇 node.js操作redis

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容