實現乙個簡單的WebSocket聊天室

2022-07-29 14:39:12 字數 1088 閱讀 1901

websocket 是 html5 開始提供的一種在單個 tcp 連線上進行全雙工通訊的協議。

websocket 使得客戶端和伺服器之間的資料交換變得更加簡單,允許服務端主動向客戶端推送資料。在 websocket api 中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以建立永續性的連線,並進行雙向資料傳輸。

在 websocket api 中,瀏覽器和伺服器只需要做乙個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。

為什麼傳統的http協議不能做到websocket實現的功能?這是因為http協議是乙個請求-響應協議,請求必須先由瀏覽器發給伺服器,伺服器才能響應這個請求,再把資料傳送給瀏覽器。換句話說,瀏覽器不主動請求,伺服器是沒法主動發資料給瀏覽器的。

socket.io是乙個websocket庫,包括了客戶端的js和伺服器端的nodejs,它的目標是構建可以在不同瀏覽器和移動裝置上使用的實時應用。它會自動根據瀏覽器從websocket、ajax長輪詢、iframe流等等各種方式中選擇最佳的方式來實現網路實時應用,非常方便和人性化,而且支援的瀏覽器最低達ie5.5

socket.io特點

具體事件和方法參見:

使用node.js + express快速搭建乙個伺服器,引入socket.io ,**如下:

//引入socket.io

//載入前端頁面

res.sendfile(__dirname + '/index.html');

});//連線socket

瀏覽器上開啟多個視窗,便可進行對話

前端頁面,利用js開啟乙個websocket

websocket的目標是在乙個單獨的持久鏈結上提供全雙工 雙向通訊。在js建立websocket之後,會有乙個http傳送到瀏覽器以發起鏈結,在取得伺服器響應後,建立的連線會使用http公升級從http協議交換為websocket協議,也就是說,使用標準的http協議無法實現websockts,只...

乙個簡單的Matrix實現

我們直接來看 吧 matrix.h pragma once include using namespace std 矩陣類 class matrix 下面是實現和測試的 matrix.cpp include matrix.h include include matrix matrix void ma...

LinkList的乙個簡單實現

鏈式線性表是資料結構裡很簡單但也是很常見的資料結構,相比順序儲存的線性表,可以更快的實現新增和刪除操作,但讀取速度比順序結構會慢。鏈式線性表的關鍵在於,每個資料儲存為節點形式。不僅僅儲存有資料,還有乙個引用 next 指向下乙個節點。鏈式結構還可以再擴充套件為雙向鍊錶 迴圈鍊錶等等。基本原理一樣,只...