socket.io websocket

zhengyeye發表於2018-08-07

不能不知道的事:

在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/

對於初學者,官方文件無疑是最快的入門方法,但是純英文語言,是有些小困難,幸好國內還有比較適合入門級別的中文解釋:

2.中文文件:https://www.w3cschool.cn/socket/

相關文章