搜尋
首頁web前端H5教程利用html5的websocket實作websocket聊天室_html5教學技巧

什麼是websocket

 WebSocket 協定是html5引入的一種新的協議,其目的在於實現了瀏覽器與伺服器全雙工通訊。看了上面連結的同學肯定對過去怎麼低效率高消耗(輪詢或comet)的做此事已經有所了解了,而在websocket API,瀏覽器和伺服器只需要要做一個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。同時這麼做有兩個好處
 
1.通訊傳輸位元組減少:比起以前使用http傳輸數據,websocket傳輸的額外資訊很少,據百度說只有2k
 
2.伺服器可以主動向客戶端推送訊息,而不用客戶端去查詢
 
關於概念和好處,網路上到處都是,不再贅述,簡單看看其原理,然後動手寫一個web版聊天室吧
 
握手

除了TCP連線的三次握手,websocket協定中客戶端與伺服器想建立連線需要一次額外的握手動作,在最新版的協定中是這個樣子的
 
客戶端向伺服器寄送請求
 

複製代碼
代碼如下:

代碼如下:Upgrade: websocket
Connection: Upgrade
Host: 127.0.0.1:8080
Origin: http://test .com
Pragma: no-cache
Cache-Control: no-cache
Sec-WebSocket-Key: OtZtd55qBhJF2XLNDRgUMg==
Sec-WebSocket-VersionBhJF2XLNDRgUMg==
Sec-WebSocket-Version: 13 -WebSocket-Extensions: x-webkit-deflate-frame
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57676. >
伺服器給予回應

 

複製程式碼程式碼如下:

程式碼如下:Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: xsOSgr30aKL2GNZKNHKmeT1qYjA=
Key 
websocket API

經過握手之後瀏覽器與伺服器建立連接,兩者就可以互相通訊了。 websocket的API真心很簡單,看看W3C的定義 




複製程式碼複製程式碼

複製程式碼



複製程式碼



複製程式碼



複製程式碼



複製碼

enum BinaryType { "blob", "arraybuffer" };
[Constructor(DOMString url, optional (DOMString or DOMString[]) protocols)]
interface WebSocket or DOMString[]) protocols)]
interface WebSocket : EventTarget read attribute DOMString url;

// ready state
const unsigned short CONNECTING = 0;
const unsigned short OPEN = 1;
const unsigned short CLOSING = 2 readonly attribute unsigned short readyState;
readonly attribute unsigned long bufferedAmount;
// networking attribarad attribute; EventHandler onclose;
readonly attribute DOMString extensions;
readonly attribute DOMString protocol;
void close([Clamp] optional unsigned short code, optional DOMString reason EventHandler onmessage;
attribute BinaryType binaryType;
void send(DOMString data); void send(Blob data); void send(ArrayBuffer send(Blob data); void send(ArrayBuffer send(Blob data); void send(ArrayBuffer data);};

創建websocket
 




複製代碼

代碼如下:
ws=new WebSocket(address); //ws://127.0.0.1:8080
 
呼叫其建構函數,傳入位址,就可以建立一個websocket了,值得注意的是地址協議得是ws/wss
 
關閉socket
複製代碼代碼如下:ws.close();

Web サービス インスタンスの close() メソッドを呼び出して、Web サービスを終了する理由を説明するコードと文字列を渡すこともできます。

いくつかのコールバック関数ハンドル

非同期実行には、当然ながらコールバック関数が不可欠です。

onopen: 接続の作成後に呼び出されます。
onmessage: サーバー メッセージの受信後に呼び出されます。 .
onerror: エラーが発生したときに呼び出されます。
onclose: 接続を閉じるときに呼び出されます。 名前を見れば、その機能がわかります。各コールバック関数は Event オブジェクトを渡し、メッセージには、event.data を通じてアクセスできます。


API の使用

ソケットを正常に作成できました。次に、そのコールバック関数に値を割り当てます



コードをコピーしますコードは次のとおりです次のように:
ws=new WebSocket(address);
ws.onopen=function(e){
var msg=document.createElement('div');
msg.style.color='#0f0';
msg.innerHTML="サーバー > 接続がオープンしました。";
msgContainer.appendChild(msg);
ws.send('{ }');

イベント バインドも使用できます


コピーcode コードは次のとおりです:
ws=new WebSocket(address);
ws.addEventListener('open',function(e){
var msg=document.createElement('div') ;
msg.style.color='#0f0';
msg.innerHTML="サーバー > 接続がオープンしました。";
msgContainer.appendChild (msg);
ws.send('{ }');

クライアント側の実装

実際、クライアント側の実装は、WebSocket に関連するいくつかの文を除いて比較的単純で、自動フォーカス、Enter キー イベント処理、自動配置などのいくつかの単純な機能があります。メッセージボックスを一番下まで押してください。一つ一つ説明しません

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將音頻添加到我的HTML5網站上?如何將音頻添加到我的HTML5網站上?Mar 10, 2025 pm 03:01 PM

本文解釋瞭如何使用< audio>元素,包括用於格式選擇的最佳實踐(MP3,OGG Vorbis),文件優化和JavaScript控件用於播放。 它強調使用多個音頻f

如何將HTML5表單用於用戶輸入?如何將HTML5表單用於用戶輸入?Mar 10, 2025 pm 02:59 PM

本文解釋瞭如何創建和驗證HTML5表格。 它詳細介紹了>元素,輸入類型(文本,電子郵件,編號等)和屬性(必需,模式,最小,最大)。 HTML5的優勢比舊方法形成

如何使用HTML5頁面可見性API檢測頁面何時可見?如何使用HTML5頁面可見性API檢測頁面何時可見?Mar 13, 2025 pm 07:51 PM

本文討論了使用HTML5頁面可見性API來檢測頁面可見性,提高用戶體驗並優化資源使用情況。關鍵方麵包括暫停媒體,減少CPU負載以及基於可見性變化管理分析。

如何使用視口元標記來控制移動設備上的頁面縮放?如何使用視口元標記來控制移動設備上的頁面縮放?Mar 13, 2025 pm 08:00 PM

本文討論了使用視口元標記來控制移動設備上的頁面縮放,重點是寬度和初始尺度之類的設置,以獲得最佳響應和性能。

如何使用地理位置API處理用戶位置隱私和權限?如何使用地理位置API處理用戶位置隱私和權限?Mar 18, 2025 pm 02:16 PM

本文討論了使用GeOlocation API管理用戶位置隱私和權限,並強調要求權限,確保數據安全性並遵守隱私法律的最佳實踐。

如何使用HTML5和JavaScript創建互動遊戲?如何使用HTML5和JavaScript創建互動遊戲?Mar 10, 2025 pm 06:34 PM

本文使用JavaScript詳細介紹了創建Interactive HTML5遊戲。 它涵蓋了遊戲設計,HTML結構,CSS樣式,JavaScript邏輯(包括事件處理和動畫)以及音頻集成。 必需的JavaScript庫(Phaser,Pi

如何將HTML5拖放API用於交互式用戶界面?如何將HTML5拖放API用於交互式用戶界面?Mar 18, 2025 pm 02:17 PM

本文介紹瞭如何使用HTML5拖放API來創建交互式用戶界面,詳細介紹了使元素可拖動的步驟,處理關鍵事件並通過自定義反饋來增強用戶體驗。它還討論了一個常見的陷阱

如何使用HTML5 Websockets API進行客戶端和服務器之間的雙向通信?如何使用HTML5 Websockets API進行客戶端和服務器之間的雙向通信?Mar 12, 2025 pm 03:20 PM

本文解釋了HTML5 Websockets API,用於實時雙向客戶服務器通信。 它詳細詳細介紹了客戶端(JavaScript)和服務器端(Python/Flask)的實現,以應對可伸縮性,狀態管理,一個挑戰

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器