溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么利用html5的websocket實(shí)現(xiàn)websocket聊天室

發(fā)布時(shí)間:2022-03-05 10:26:23 來(lái)源:億速云 閱讀:256 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下怎么利用html5的websocket實(shí)現(xiàn)websocket聊天室,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

    什么是websocket

    WebSocket協(xié)議是html5日期的一種新的協(xié)議,其目的在于實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信。看了上面的鏈接的同學(xué)肯定對(duì)過(guò)去怎么低效率高消耗(從而或comet)的做此事已經(jīng)有所了解了,而在websocketAPI中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。同時(shí)這樣做有兩個(gè)好處1.通信傳輸字節(jié)減少:比起以前使用http傳輸數(shù)據(jù),websocket傳輸?shù)念~外信息很少,據(jù)百度說(shuō)只有2k2.服務(wù)器可以主動(dòng)向客戶端推送消息,而不用客戶端去查詢關(guān)于概念和好處,網(wǎng)上到處都是,不再多余述,簡(jiǎn)單看看其原理,然后動(dòng)手寫一個(gè)網(wǎng)站版聊天室吧握手

    除了TCP連接的三次握手,websocket協(xié)議中客戶端與服務(wù)器想建立連接需要一次額外的握手動(dòng)作,在最新版本的協(xié)議中是這個(gè)樣子的客戶端向服務(wù)器發(fā)送請(qǐng)求

    復(fù)制代碼

    代碼如下:

    GET/HTTP/1.1升級(jí):websocket連接:升級(jí)主機(jī):127.0.0.1:8080來(lái)源:http://test.com語(yǔ)法:無(wú)緩存緩存控制:無(wú)緩存Sec-WebSocket-密鑰:OtZtd55qBhJF2XLNDRgUMg==Sec-WebSocket-版本:13Sec-WebSocket擴(kuò)展:x-webkit-deflate-frame用戶代理:Mozilla/5.0(Macintosh;IntelMacOSX10_9_0)AppleWebKit/537.36(KHTML,例如Gecko)Chrome/31.0.1650.57Safari/537.36

    服務(wù)器定義響應(yīng)

    復(fù)制代碼

    代碼如下:

    HTTP/1.1101交換協(xié)議升級(jí):websocket連接:升級(jí)Sec-WebSocket-接受:xsOSgr30aKL2GNZKNHKmeT1qYjA=

    在請(qǐng)求中的“Sec-WebSocket-Key”是隨機(jī)的,服務(wù)器端會(huì)用這些數(shù)據(jù)來(lái)構(gòu)造出一個(gè)SHA-1的信息摘要。把“Sec-WebSocket-Key”加上一個(gè)魔幻字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。使用SHA-1加密,之后進(jìn)行BASE-64編碼,將結(jié)果做為“Sec-WebSocket-Accept”頭的值,返回給客戶端(來(lái)自維基百科)。websocketAPI

    通過(guò)web瀏覽器的API真心很簡(jiǎn)單,看看W3C的定義

    復(fù)制代碼

    代碼如下:

    枚舉BinaryType{“blob”,“arraybuffer”};[Constructor(DOMStringurl,可選(DOMString或DOMString[])協(xié)議))接口WebSocket:EventTarget{只讀屬性DOMStringurl;//就緒狀態(tài)constunsignedshortCONNECTING=0;constunsignedshortOPEN=1;constunsignedshortCLOSING=2;constunsignedshortCLOSED=3;只讀屬性u(píng)nsignedshortreadyState;readonly屬性u(píng)nsignedlongbufferedAmount;//聯(lián)網(wǎng)屬性EventHandleronopen;屬性EventHandleronerror;屬性EventHandleronclose;只讀屬性DOMString擴(kuò)展;

    只讀屬性DOMString協(xié)議;voidclose([Clamp]可選的無(wú)符號(hào)短代碼,可選的DOMString原因);//消息傳遞屬性EventHandleronmessage;屬性BinaryTypebinaryType;無(wú)效send(DOMStringdata);無(wú)效send(Blob數(shù)據(jù));無(wú)效send(ArrayBufferdata);無(wú)效send(ArrayBufferViewdata);};

    創(chuàng)建websocket

    復(fù)制代碼

    代碼如下:

    ws=newWebSocket(address);//ws://127.0.0.1:8080

    調(diào)用其構(gòu)造函數(shù),預(yù)期地址,就可以創(chuàng)建一個(gè)websocket了,稱為的是地址協(xié)議得是ws/wss關(guān)閉socket

    復(fù)制代碼

    代碼如下:

    ws.close();

    調(diào)用webservice實(shí)例的close()方法就可以關(guān)閉webservice,當(dāng)然也可以引發(fā)一個(gè)代碼和字符串說(shuō)明為什么關(guān)了幾個(gè)變量函數(shù)句柄而引起其初始化執(zhí)行,從而函數(shù)自然少不了,有四個(gè)重要的onopen:連接創(chuàng)建后調(diào)用消息:接收到服務(wù)器消息后調(diào)用錯(cuò)誤:錯(cuò)誤時(shí)調(diào)用onclose:關(guān)閉連接的時(shí)候調(diào)用

    看名字就知道是干什么的了,每個(gè)其他函數(shù)都會(huì)預(yù)定一個(gè)事件對(duì)象,可以通過(guò)event.data訪問(wèn)消息使用API我們可以在創(chuàng)建套接字成功后為其設(shè)置函數(shù)賦值

    復(fù)制代碼

    代碼如下:

    ws=newWebSocket(address);ws.onopen=function(e){varmsg=document.createElement('div');msg.style.color='#0f0';msg.innerHTML=“服務(wù)器>連接打開(kāi)?!?msgContainer.appendChild(msg);ws.send('{<'+document.getElementById('name')。value+'>}');

    也可以通過(guò)事件綁定的方式

    復(fù)制代碼

    代碼如下:

    ws=newWebSocket(address);ws.addEventListener('open',function(e){varmsg=document.createElement('div');msg.style.color='#0f0';msg.innerHTML=“Server>connectionopen?!?msgContainer。appendChild(msg);ws.send('{<'+document.getElementById('name')。value+'>}');

    客戶端實(shí)現(xiàn)其實(shí)客戶端的實(shí)現(xiàn)比較簡(jiǎn)單,除了websocket相關(guān)的幾句就是一些自動(dòng)聚焦,回車鍵事件處理,消息框自動(dòng)定位到底部等簡(jiǎn)單功能,不一一說(shuō)明了

看完了這篇文章,相信你對(duì)“怎么利用html5的websocket實(shí)現(xiàn)websocket聊天室”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI