1. 程式人生 > >socket.io websocket

socket.io websocket

不知道 分享圖片 完全 平臺 監聽 hub js實現 target 自己

不能不知道的事:

在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:給除了自己以外的客戶端廣播消息.

socket.io websocket