基于node.js和Cocos Creator的开发

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

2019-10-17  本文已影响0人  Woodlouse

一,前端发送协议

在建立长连接后,我们发送的第一条协议称之为“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通信
下一篇 用户长连接管理

上一篇下一篇

猜你喜欢

热点阅读