• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
            隨筆 - 398, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            cocos creator使用protobufjs

            1、npm install -g protobufjs 安裝protobufjs
            2、
            protobufjs\dist中找到protobuf.js文件,并作為插件拖放到Creator中(注意,必須作為插件,并且是四個(gè)選項(xiàng)都必須選中,否則將報(bào)錯(cuò)!)
            3、定義msg.proto
            文件,并將prot文件轉(zhuǎn)成對(duì)應(yīng)的js版本.
                命令:
            ::protobuf.js版本6.x生成js文件 pbjs -t static-module -w commonjs -o Msg.js msg.proto        msg.proto是proto文件,Msg.js是生成的js文件
            4、
            修改Msg.js文件,注釋掉var $protobuf = require("protobufjs/minimal");
               新增var $protobuf = protobuf;
            5、將Msg.js拖放到Creator中,寫腳本:
                var ipPort = "ws://" + this.ip + ":" + this.port;
                console.log(ipPort);
               this.ws = new WebSocket(ipPort);
               this.ws.binaryType = 'arraybuffer'; //這里設(shè)置為發(fā)送二進(jìn)制數(shù)據(jù)
               this.ws.onopen = function (event) {
                  console.log("open");
                   //打開成功立刻進(jìn)行發(fā)送
                   if (self.ws.readyState === WebSocket.OPEN) {
                       let message = msg.Login.create({name: "hello", pwd: "pwd"});//構(gòu)造對(duì)象
                       let messageBuf = msg.Login.encode(message).finish(); //獲取二進(jìn)制數(shù)據(jù),一定要注意使用finish函數(shù)
                       self.ws.send(messageBuf); //發(fā)送二進(jìn)制數(shù)據(jù)
                   }
               };
               this.ws.onmessage = function (event) {
                   console.log("onmessage : " + event.data);
               };
               this.ws.onerror = function (event) {
                   console.log("on error :", event.data);
               };
               this.ws.onclose = function (event) {
                   console.log("onclose");
               };
            6、組包使用ArrayBuffer這個(gè)數(shù)據(jù)結(jié)構(gòu),它示通用的、固定長度的原始二進(jìn)制數(shù)據(jù)緩沖區(qū)。
              ArrayBuffer 不能直接操作,而是要通過類型數(shù)組對(duì)象DataView 對(duì)象來操作,它們會(huì)將緩沖區(qū)中的數(shù)據(jù)表示為特定的格式,并通過這些格式來讀寫緩沖區(qū)的內(nèi)容。
                 let message = msg.Login.create({name: "hello", pwd: "pwd"});
                 let msgEncode = msg.Login.encode(message).finish(); //一定要注意使用finish函數(shù)
                 //二進(jìn)制數(shù)據(jù)的長度+一個(gè)short的長度
                var sendBuf = new ArrayBuffer(msgEncode.length + 2);
                var dv = new DataView(sendBuf);
                dv.setInt16(0,1); //寫入一個(gè)short值 起始位置以byte為計(jì)數(shù)的指定偏移量(byteOffset)處儲(chǔ)存一個(gè)16-bit數(shù)
                //將二進(jìn)制數(shù)據(jù)寫入
                var u8view = new Uint8Array(sendBuf, 2); //跳過一個(gè)short的距離
                for (var i = 0, strLen = msgEncode.length; i < strLen; ++i){
                     u8view[i] = msgEncode[i];
                }
                self.ws.send(sendBuf);
            7、解包:
                 this.ws.onmessage = function (event) {
                        console.log("onmessage : " + event.data);
                var recv_data = event.data
                var dv = new DataView(recv_data);
                var len = dv.getInt16(0) //相對(duì)于起始位置偏移 n 個(gè)字節(jié)處開始,獲取一個(gè)16-bit數(shù)(短整型,2個(gè)字節(jié)).
               //消息體
               var data_body = new Uint8Array(recv_data, 4); 
               //轉(zhuǎn)成PB消息體
              let message = msg.Login.decode(data_body);//構(gòu)造對(duì)象
            8、解包格式應(yīng)和組包格式一樣;cocos下經(jīng)過命令處理后的消息js文件不能作為插件使用,使用的時(shí)候切記
            9、https://github.com/zimv/websocket-heartbeat-js,這是一個(gè)封裝好的帶有心跳和重連websocket,可以直接拿來使用

            posted on 2019-07-27 16:48 Benjamin 閱讀(1589) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 雜談

            婷婷久久香蕉五月综合加勒比| 最新久久免费视频| 亚洲天堂久久精品| 亚洲国产精久久久久久久| 国产精品亚洲综合专区片高清久久久| 99久久国产主播综合精品| 国内精品久久久久影院薰衣草| 精品一区二区久久久久久久网站| 久久久黄片| 99精品久久精品| 久久AV高潮AV无码AV| 精品久久综合1区2区3区激情| 久久天天躁夜夜躁狠狠| 国产精品欧美久久久久无广告| 人妻丰满AV无码久久不卡| 久久精品国产亚洲精品| 久久精品国产秦先生| 国内精品人妻无码久久久影院| 久久人人爽人人人人爽AV| 久久久久久一区国产精品| 情人伊人久久综合亚洲| 久久66热人妻偷产精品9| 狠狠色婷婷久久综合频道日韩 | 亚洲精品成人久久久| 青草影院天堂男人久久| 99久久精品日本一区二区免费| 99久久精品免费看国产一区二区三区 | 97r久久精品国产99国产精| 亚洲国产成人久久综合区| 久久99精品免费一区二区| 秋霞久久国产精品电影院| 亚洲国产精品婷婷久久| av无码久久久久不卡免费网站| 久久天天躁狠狠躁夜夜网站| 久久偷看各类wc女厕嘘嘘| 久久ww精品w免费人成| 精品久久久久久久久午夜福利 | 青青草原综合久久大伊人导航| 久久国产精品无码网站| 久久99精品国产麻豆不卡| 久久久无码精品午夜|