socket.io websocket
阿新 • • 發佈:2018-08-07
不知道 分享圖片 完全 平臺 監聽 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