美文网首页基于node.js和Cocos Creator的开发
基于Node.js和Cocos Creator的开发【六,第一个

基于Node.js和Cocos Creator的开发【六,第一个

作者: Woodlouse | 来源:发表于2019-10-17 23:33 被阅读0次

    一,前端发送协议

    在建立长连接后,我们发送的第一条协议称之为“enter”,用来建立用户ID和长连接的对应关系。socket协议依旧使用JSON进行传递。

    1,协议结构的设计

    每条协议由两部分组成

    • 操作
    • 和操作相关的数据
      如下:
    {
       "opr" : "oprname",
       "data" : {}
    }
    

    2,bind协议的定义

    为了方便前端协议定义的管理,我们把所有前端相关的协议定义统一放置到一个文件中:
    net/protocol/protocolData.js
    在此输入以下代码:

    var protocolData = {};
    var userData = require('userData');
    
    protocolData.enter = function() {
        return {
            'opr' : 'enter',
            'data' : {
                'userId' : userData.userId,
                'token' : userData.token
            }
        }
    }
    
    module.exports = protocolData;
    

    3,前端发送enter协议

    前端何时发送enter协议呢?在socket连接后,即发送此协议。
    在socket.js引入协议的定义:

    var protocolData = require('protocolData');
    

    输入以下函数:

        _onOpne: function() {
            // 发送绑定协议
            this.send(protocolData.enter());
        },
    

    在建立socket建立时即调用此函数:

     ws.onopen = function (event) {
            console.log('ws test 000 Send Text WS was opened.');
            self._onOpne();
     };
    

    二,后端的处理

    1,消息处理入口总览

    router.js中定义socket消息的处理入口:

    router.onSocketMsg = function(initData, conn) {
    }
    

    在socket状态监听中调用消息处理入口:

      conn.on('text', function (data) {
            router.onSocketMsg(data, conn);
        })
    

    2,消息分发

    socket消息的分发实现和HTTP的分发采用同样的映射方案,定义消息处理变量:

    var socketHander = {};
    

    实现enter操作的实现:

    socketHander.enter = function(data, conn) {
        // DO NOTHING
    }
    

    3,消息处理入口的实现

    在onSocketMsg函数中,我们需要先检测协议中携带的token数据是否正确,正确才能继续处理,否则返回给用户token错误信息。

    router.onSocketMsg = function(initData, conn) {
        var data = null;
        try{
            data = JSON.parse(initData);
        }catch(e) {
            console.log('parse json error , ', e);
            conn.sendText('parse data error');
            return;
        }
        // 检测token
        user.checkToken(data['data']['userId'], data['data']['token'], function(res) {
            console.log('checkToken come in res = ' + res);
            if(!res) {
                var resdata = {
                    'opr':data['opr'],
                    'data' : {
                        'error': 1,
                        'info' : 'token is error!!'
                    }
                }
                conn.sendText(JSON.stringify(resdata));
                return;
            }
    
            // 进行分发
            socketHander[data['opr']](data['data'], conn)
        });
    }
    

    代码在这儿


    上一篇 实现Socket通信
    下一篇 用户长连接管理

    相关文章

      网友评论

        本文标题:基于Node.js和Cocos Creator的开发【六,第一个

        本文链接:https://www.haomeiwen.com/subject/kwdbmctx.html