Laya WebSocket

  • WebSocket 是基于 TCP 的協(xié)議岖常,使Html5可以實現(xiàn)進行全雙工通訊的協(xié)議谣殊。websocket 常見于瀏覽器中王凑,但是這個協(xié)議不受使用平臺的限制。
  • Laya的Laya.Socket是對Html5 WebScoket的封裝薄腻。發(fā)送的數(shù)據(jù)格式一般為字符串或者二進制。
  • 通信數(shù)據(jù)格式是二進制數(shù)據(jù)届案,則需要配合Laya.Byte使用庵楷,二進制格式的優(yōu)點和使用方法可以看下Laya Byte
  • webSocket的鏈接是異步過程楣颠。所以通信消息都需要在open事件完成之后操作尽纽。
    webScoket事件:
    Event Summary
    open 連接建立成功后調(diào)度。
    message 接收到數(shù)據(jù)后調(diào)度童漩。
    close 連接被關(guān)閉后調(diào)度弄贿。
    error 出現(xiàn)異常后調(diào)度。

關(guān)于webSocket我們不做其他贅述矫膨,有興趣可以看下HTML5 WebSocket挎春。

Laya.Scoket

  • Property(屬性)
Name Summary
connected 表示此 Socket 對象目前是否已連接。
disableInput 不再緩存服務(wù)端發(fā)來的數(shù)據(jù)豆拨。
endian 主機字節(jié)序直奋,是 CPU 存放數(shù)據(jù)的兩種不同順序,包括小端字節(jié)序和大端字節(jié)序施禾。
input 緩存的服務(wù)端發(fā)來的數(shù)據(jù)脚线。
output 表示需要發(fā)送至服務(wù)端的緩沖區(qū)中的數(shù)據(jù)。
protocols 子協(xié)議名稱弥搞。子協(xié)議名稱字符串邮绿,或由多個子協(xié)議名稱字符串構(gòu)成的數(shù)組。
  • Method(方法)
Name Summary
Socket 創(chuàng)建新的 Socket 對象攀例。默認字節(jié)序為 Socket.BIG_ENDIAN 船逮。
cleanSocket 清理socket。
close 關(guān)閉連接粤铭。
connect 連接到指定的主機和端口挖胃。
connectByUrl 連接到指定的服務(wù)端 WebSocket URL。
flush 發(fā)送緩沖區(qū)中的數(shù)據(jù)到服務(wù)器梆惯。
send 發(fā)送數(shù)據(jù)到服務(wù)器酱鸭。
  • Constants(常量)
    • BIG_ENDIAN
      主機字節(jié)序,是 CPU 存放數(shù)據(jù)的兩種不同順序垛吗,包括小端字節(jié)序和大端字節(jié)序凹髓。 BIG_ENDIAN :大端字節(jié)序,地址低位存儲值的高位怯屉,地址高位存儲值的低位蔚舀。有時也稱之為網(wǎng)絡(luò)字節(jié)序饵沧。 LITTLE_ENDIAN :小端字節(jié)序,地址低位存儲值的低位赌躺,地址高位存儲值的高位狼牺。
    • LITTLE_ENDIAN
      主機字節(jié)序,是 CPU 存放數(shù)據(jù)的兩種不同順序寿谴,包括小端字節(jié)序和大端字節(jié)序锁右。 LITTLE_ENDIAN :小端字節(jié)序失受,地址低位存儲值的低位讶泰,地址高位存儲值的高位。 BIG_ENDIAN :大端字節(jié)序拂到,地址低位存儲值的高位痪署,地址高位存儲值的低位。有時也稱之為網(wǎng)絡(luò)字節(jié)序兄旬。

Laya.Socket使用

private webSocket: Laya.Socket;
    private openBtn: Laya.Button;
    private sendBtn: Laya.Button;
    private closeBtn: Laya.Button;
    initWebSocket() {
        this.openBtn = new Laya.Button(null, '連接服務(wù)器');
        this.openBtn.width = 150,
            this.openBtn.height = 50
        this.openBtn.labelSize = 30;
        this.openBtn.labelColors = '#FFFFFF';
        this.openBtn.x = 200;
        this.openBtn.y = 150;
        Laya.stage.addChild(this.openBtn);

        this.sendBtn = new Laya.Button(null, '發(fā)送消息');
        this.sendBtn.width = 150,
            this.sendBtn.height = 50
        this.sendBtn.labelSize = 30;
        this.sendBtn.labelColors = '#FFFFFF';
        this.sendBtn.x = 200;
        this.sendBtn.y = 350;
        Laya.stage.addChild(this.sendBtn);

        this.closeBtn = new Laya.Button(null, '斷開服務(wù)器');
        this.closeBtn.width = 150,
            this.closeBtn.height = 50
        this.closeBtn.labelSize = 30;
        this.closeBtn.labelColors = '#FFFFFF';
        this.closeBtn.x = 200;
        this.closeBtn.y = 550;
        Laya.stage.addChild(this.closeBtn);

        //初始化Socket對象
        this.webSocket = new Laya.Socket();
        this.webSocket.on(Laya.Event.OPEN, this, this.openHandler);//連接正常打開拋出的事件
        this.webSocket.on(Laya.Event.MESSAGE, this, this.receiveMsgHandler);//接收到消息拋出的事件
        this.webSocket.on(Laya.Event.CLOSE, this, this.closeHandler);//socket關(guān)閉拋出的事件
        this.webSocket.on(Laya.Event.ERROR, this, this.errorHandler);//連接出錯拋出的事件

        //點擊按鈕鏈接服務(wù)器
        this.openBtn.on(Laya.Event.CLICK, this, () => {
            this.webSocket.connectByUrl("wss://ws2s.feling.net/");
        })
        //點擊按鈕發(fā)送消息
        this.sendBtn.on(Laya.Event.CLICK, this, () => {
            this.webSocket.send('{"command":"connect","host":"ip.feling.net","port":80}');
        })
        //點擊按鈕斷開鏈接
        this.closeBtn.on(Laya.Event.CLICK, this, () => {
            this.webSocket.close();
        })

    }

    openHandler(msg) {
        console.log("webSocket鏈接成功,可以發(fā)送消息.");
    }

    receiveMsgHandler(msg) {
        console.log("收到服務(wù)器消息: " + JSON.stringify(msg));
    }

    closeHandler(msg) {
        console.log("與服務(wù)器連接斷開.");
    }

    errorHandler(msg) {
        console.log("與服務(wù)器通信錯誤.");
    }

大致通信流程:
客戶端發(fā)起鏈接—>鏈接成功響應OPEN事件
客戶端發(fā)送消息—>服務(wù)端接受到消息處理完后進行回調(diào)—>客戶端響應MESSAGE事件
客戶端斷開鏈接—>斷開鏈接響應Close事件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末领铐,一起剝皮案震驚了整個濱河市悯森,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绪撵,老刑警劉巖瓢姻,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異音诈,居然都是意外死亡幻碱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門细溅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褥傍,“玉大人,你說我怎么就攤上這事喇聊』蟹纾” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵誓篱,是天一觀的道長邻耕。 經(jīng)常有香客問我,道長燕鸽,這世上最難降的妖魔是什么兄世? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮啊研,結(jié)果婚禮上御滩,老公的妹妹穿的比我還像新娘鸥拧。我一直安慰自己,他們只是感情好削解,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布富弦。 她就那樣靜靜地躺著,像睡著了一般氛驮。 火紅的嫁衣襯著肌膚如雪腕柜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天矫废,我揣著相機與錄音盏缤,去河邊找鬼。 笑死蓖扑,一個胖子當著我的面吹牛唉铜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播律杠,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼潭流,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柜去?” 一聲冷哼從身側(cè)響起灰嫉,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗓奢,沒想到半個月后讼撒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蔓罚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年椿肩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豺谈。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡郑象,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茬末,到底是詐尸還是另有隱情厂榛,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布丽惭,位于F島的核電站击奶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏责掏。R本人自食惡果不足惜柜砾,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望换衬。 院中可真熱鬧痰驱,春花似錦证芭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蝇完,卻和暖如春官硝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背短蜕。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工氢架, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忿危。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓达箍,卻偏偏與公主長得像没龙,于是被迫代替她去往敵國和親铺厨。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345