不能不知道的事:
在Http協議中,客戶端向伺服器端傳送請求,伺服器端收到請求再進行迴應,整個過程中,伺服器端是被動方,客戶端是主動方;
websoket是H5的一種基於TCP的新通訊協議,它與Http協議的不同之處就是Websocket
能實現伺服器端主動推送訊息到客戶端,伺服器端與客戶端都能發起通訊,實現瀏覽器與伺服器之間的雙向通訊;
socket.io是一個完全由js實現,基於nodejs、支援websocket的協議用於實時通訊、跨平臺的開源框架,它包括客戶端的js和伺服器端的nodejs。
可以這樣理解:socket.io封裝了websocket以及其他的一些協議,實現了websocket的伺服器端程式碼,同時具有很強的相容性,相容各種瀏覽器以及移動裝置。有了它,便可以更快捷的實現伺服器端與客戶端之間的實時通訊。
這樣的話:
實現一個簡單的多人聊天室功能。謝謝大神的分享:https://www.cnblogs.com/Wayou/p/hichat_built_with_nodejs_socket.html
程式碼已上傳至git:請戳這裡
應該再說說這些:
1.socket.io官網:https://socket.io/
2.(1)socket.emit:客戶端與伺服器端之間傳送訊息是用emit;
例如客戶端向服務端傳送登入請求
1 //發起一個login事件並將輸入的暱稱傳送到伺服器 2 socket.emit('login',nickName) //login是自定義的事件,後面是帶的引數
(2)socket.on:伺服器端要接收客戶端傳送的login
事件,就得對該事件進行監聽
1 //使用者登入事件 2 socket.on('login', function(nickname) { 3 if(users.indexOf(nickname)>-1){ 4 socket.emit('nickExisted'); 5 }else{ 6 socket.userIndex = users.length; 7 socket.nickname = nickname; 8 users.push(nickname); 9 socket.emit('loginSuccess'); 10 //向所有連線到伺服器的客戶端傳送給當前登入使用者的暱稱 11 io.sockets.emit('system',nickname,users.length, 'login'); 12 } 13 })
同理,伺服器端也可以向客戶端傳送事件,只要客戶端也對該事件進行監聽就行.
(3)io.sockets.emit:伺服器端向連線的所有客戶端傳送訊息得用io.sockets.emit;
(4)socket.broadcast.emit:給除了自己以外的客戶端廣播訊息.
3.socket.io是一個基於 WebSocket 的 C-S 實時通訊庫,它可以實現瀏覽器和伺服器之間的實時、雙向和基於事件的通訊;
4.Socket.io不是websocket的實現,雖然它的確使用了websocket來傳輸的,但是它為每個包新增一些後設資料:包型別、名稱空間以及ack id,
其主要特點:
-
可靠性
-
支援自動連線
-
斷開檢測
-
支援二進位制
-
支援混合
-
支援房間(聊天室功能)
5.使用場景:①比如說:給線上使用者實時推送一些訊息;②某個使用者購買了什麼,實時推送給其他使用者;
值得收藏的:
1.英文文件:https://socket.io/
對於初學者,官方文件無疑是最快的入門方法,但是純英文語言,是有些小困難,幸好國內還有比較適合入門級別的中文解釋: