对于js中网络接口websocket,二进制数组arraybuffer,视图对象dataview学习记录。

时间:2024-12-09 14:50:52

1.关于WebSocket对象,他的协议头不是http://,而是ws:// 

服务器传递到客户端的数据可能是字符串,所以我们要判断一下,是否数据是字符串

onMessage: function ( evt )
    {
        if ( typeof ( evt . data ) == "string" )             //服务器传过来的可能是字符串,判断是不是
        {
            cc . log ( "typeof()" );
        }
        else
        {
            cc . log ( evt . data );
            var dview = new DataView ( evt . data );
            var readPos = 0 ;
            var mainCode = dview . getUint16 ( readPos , true );  readPos += 2 ;
            var subCode = dview . getUint16 ( readPos , true );   readPos += 2 ;
            MahjongSocket . instances . onMsg ( mainCode , subCode , dview , readPos );
        }

    },

也可能是二进制的数据,(blob或者是arraybuffor),一个websocket只能接收一种二进制数据,要么是blob,要么是arraybuffer,但是默认是blob,但是我们可以通过   WebSocket对象的一个属性binaryType指定接收的二进制类型。="arraybuffer";       那么这时指定接收的二进制数据就是ArrayBuffer

 

            

var  bf = new ArrayBuffer(4);        //ArrayBuffer是存放二进制数据的数组,这里的参数4是指创建的数组长度是4个字节。

               //ArrayBuffer对象数组有一个参数,typeLength。表示给数组分配的字节长度

要注意一点,这个二进制数组创建时分配的内存是连续的,如果要求的内存比较大,那么可能分配不成功,所以我们使用他时我们要检验一下

 

服务器传来的二进制数据中包含了多种数据类型,二进制数组ArrayBuffer自身不能进行操作(读取,设置),我们可以把它传入DataView对象进行操作

var dv = new DataView(bf);

dv.getInt32(pos,true);   //从ArrayBuffer数组的下标处开始读取一个32位二进制数,转化为整数

(pos,1,true);   //在ArrayBuffer数组的pos下标处开始设置一个32位二进制,把1转化成二进制