skynet-sproto-js (纯 js 实现 skynet 的 sproto 压包解包)

skynet-sproto-js for Cocos Creator

  • Cocos Creator 编辑器扩展:在 Cocos Creator 中,用纯 js 脚本实现‘云凤’ skynet 中 sproto 的压包解包处理,达到在 Cocos Creator 中和 skynet sproto 无缝通讯。

  • 目录结构

    • packages下目录结构
      • skynet-sproto-js 下目录结构
        • tool (工具,生成js版sproto工具
        • test.zip (测试工程,解压出来丢进新工程即可使用)
        • –****

游戏中使用流程

#API 图片展现

#API 代码文本展现 (方便copy代码)

  • PROTOCAL_CORE
    • loadSproto(sprotofilename,callback) 加载sprotofilename文件的数据,放在resource文件下
      | 参数 | 必选 |类型 | 说明 |
      | --------- | --------|--------------- |------|
      | sprotofilename | true |string | sproto文件名 |
      | callback | false |function | 加载完成后的回调函数 |

  • PROTOCAL_CORE
    • initSproto(spb) 将加载后的spb转码数据,调用init方法初始化(所以可以自定义自己load自己的spb文件,不使用api的loadSproto方法,将数据丢进initSproto即可)
      | 参数 | 必选 |类型 | 说明 |
      | --------- | --------|--------------- |------|
      | initSproto| true |array | spb转码的数据 |


  • PROTOCAL_CORE
    • getSendPackage(cmd,param,sessionId) 将数据打包,准备发送给服务器
      | 参数 | 必选 |类型 | 说明 |
      | -----------| --------|--------------- |------|
      | cmd | true |string | 协议头名称,在sproto文件中定义 |
      | param | true |table | 协议数据,根据协议自定义 |
      | sessionId | true |int | sessionId,为了回调记录 |


  • PROTOCAL_CORE
    • getRecvPackage(buffer,handleMessage_req,handleMessage_rsp) 收到服务器的数据buff,将数据解包
      | 参数 | 必选 |类型 | 说明 |
      | -----------| --------|--------------- |------|
      | buffer | true |Arraybuffer | 收到服务器的二进制数据包 |
      | handleMessage_req | true |function | 服务器主动推送消息的回调处理函数 |
      | handleMessage_rsp | true |function | 客户端通过sessionId发送给服务器,然后服务器在回调的处理函数 |

代码调用

  • 1:首先,要将服务器的 s2c 以及 c2s 的sproto文件,通过tool工具转化成js的 sproto 文件
  • 2:吧第一步生成的js识别的 sproto 文件,放到 Cocos Creator 工程项目下的 resource 文件夹中 即可
  • 3:完整测试代码在 请参考 sproto 项目测试 文档。
    
   
    //引入 PROTOCAL_CORE 核心类 
    var PROTOCAL_CORE = require('PROTOCAL_CORE');

   
    //1: 加载 spb 协议文件,
    var newpath = "SPROTO/sproto";//路径在resource/SPROTO/sproto.spb
    PROTOCAL_CORE.loadSproto(newpath,function(data){
        console.log(" 加载spb 文件成功!! ")
    });
    //注意事项
    //这里 PROTOCAL_CORE.loadSproto 加载后系统会自动调用 PROTOCAL_CORE.initSproto()
    //所以我们可以自定 load相关自己的spb文件,然后自己直接调用 PROTOCAL_CORE.initSproto() 也可以的


    //启动websocket NetWebSocket 详见 
    var cla = require('NetWebSocket')
    var currentNet = new cla();
    currentNet.prepareWebSocket("192.168.103.98","8303");
    this._currentNet = currentNet;


    //2:客户端主动发送数据 
    var param = {
        platform: 'mocha',
        game: 'test',
        token: '123456',
    }; 
    this._currentNet.send("login",param,function(data){
        console.log("收到消息:" + data)
    })
    

    //3:服务器主动推送消息给客户端
    this._currentNet._webSocket.onmessage = function (event) {
        var data = event.data;
        
        //json格式
        if(this._isJson == true) {
            var uint8Array = new Uint8Array(data);
            var newdata = Utf8ArrayToStr(uint8Array);
            var sz = newdata.length;
            if (typeof(newdata) == "string") {
                var msg = JSON.parse(newdata);
            }
        }else {//sproto 格式;
            var _handleMessage_req = function(name,message){
            }
            var _handleMessage_rsp = function(sessionId, message){
            }
            PROTOCAL_CORE.getRecvPackage(data,_handleMessage_req,_handleMessage_rsp,self);
        }
    };
   

工具 tool 使用

  • 注意工具tool目前只提供了mac下使用,windos后续会增加上去
  • 1:安装 node
  • 2:需要将skynet的lua版本转化为 Cocos Creator 识别的 sproto 文件
  • 3:工具目录在 packages\skynet-sproto-js\tool 下,详见 请参考 生成js版sproto工具 文档。

问题

问题

  • 1:首先,要将服务器的 s2c 以及 c2s 的sproto文件,通过tool工具转化成js的 spb 文件
  • 2:其次,客户端js和服务器lua的数组的开始索引不一样,js是从0开始,lua是从1开始,所以js传输数组给lua,lua会默认吧第0个索引的数据去掉,反之lua到js,js会吧索引为0为null

插件下载地址

有问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

最新版本改进 v1.0.2

1:我发布论坛的3.23 第二天上传了v1.0.1版本,现在cocos官网都没人审核 :sleepy:


2:因为临时其实项目忙,没太去关注社区,今天v1.0.2看到抽空修正支持 数组,结构体,几乎满足skynet的所有结构,详见截图

测试的协议 sproto-lua.zip (1.4 KB)
#3:注意:最新的是v1.0.2 版本

6赞

牛逼呀

不支持map还卖6块钱,大写的鄙视

刚想赞,仔细一看是广告啊!人家skynet都是开源的,你个插件还要钱。

2赞

可以使用 https://github.com/zhangshiqian1214/sproto-js

你发的这个有问题的, 还是让服务端改protobuf吧.
血的教训~

不好意思,因为后面一直没太关注社区
私聊我邮箱,发个最新版本v1.0.2给你

:joy: 玩玩而已,要免费的私聊我

不好意思,因为后面一直没太关注社区
私聊我邮箱,发个最新版本v1.0.2给你
官网我v1.0.1版本,上个月发布的,到今天都没人去审核 :sleepy:
今天改了下,发布了v1.0.2,支持上面链接的所有数据结构,基本满足项目需求。

不用,我自己有服务器

:scream: 有啥问题, 我正准备用 https://github.com/zhangshiqian1214/sproto-js 做开发

PROTOCAL_CORE这个是什么?require一个不存在的文件?

windows 导出spb有空搞一搞呗

有ts版的吗?

有没有发现解析字符串比number,boolean要慢很多