摘要:的總結在一個聊天室系統中,常常使用作為通信的主要方式。服務端對客戶端所發送的請求進行處理登陸驗證等操作在這里,通過來接受客戶端所傳遞的數據,為相同方法名,其后跟的函數為登陸驗證的具體操作,比如用戶驗證是否存在。
websocket的總結
在一個聊天室系統中,常常使用websocket作為通信的主要方式。
參考地址:https://www.jianshu.com/p/00e...
關于自己的看法:
websocket協議是一種新的tcp協議,與常用的http協議不同的地方在于,無論是客戶端還是服務端,都能進行自由通信,雙方都比較靈活,不會有局限性。
文中所提到的socket.io包是封裝有websocket協議的包,他包含不少服務端處理的代碼,兼容性強,主要服務于實時通信。
開始之前,需要構建網絡服務,主要用到的包就是socket.io和http服務的包,由于是node的后臺,所以需要設置一個進行監聽的端口,方便在瀏覽器中調試。
/*app.js*/ /*構建http服務*/ var app = require("http").createServer() /*引入socket.io*/ var io = require("socket.io")(app); /*定義監聽端口,可以自定義,端口不要被占用*/ var PORT = 8081; /*監聽端口*/ app.listen(PORT);
后臺系統為nodejs搭載
主要應用在聊天系統中socket.io中的方法:
socket.emit()
socket.on()
io.sockets.emit()
對于第一種,socket.emit()方法主要是在客戶端和服務端之間進行信息請求,例如客戶端向服務端發送請求或者服務端向客戶端進行反饋請求,這兩種情況下主要用到的方法。
需求場景:客戶端上,用戶輸入賬號密碼進行登陸,服務端怎么識別?
(1)首先是客戶端獲取到用戶在輸入框中的信息,然后對服務端進行發送信息。
socket.emit("login",{username:uname})
代碼塊中,login為自定義方法名,其后是傳送的數據,項目中只考慮到用戶名的輸入,所以保存為一個對象發送給服務端,這里用到了socket.emit()方法,是客戶端----->服務端的請求。
(2)服務端對客戶端所發送的請求進行處理
socket.on("login",function(data){ /*登陸驗證等操作*/ })
在這里,通過socket.on來接受客戶端所傳遞的數據,為相同方法名,其后跟的function函數為登陸驗證的具體操作,比如用戶驗證是否存在。
(3)服務端驗證成功了,把反饋信息發送給客戶端。
通過上面知道,一端向另一端發送請求的時候,需要用到socket.emit()方法,但是這次是服務端向客戶端進行發送消息。
socket.emit("loginSuccess",data)
這里,把之前客戶端所發送的請求,再次返回去,讓客戶端進行操作。
(4)客戶端接收返回結果
接收的方法,還是socket.on(),不過這次是客戶端接收服務端所傳遞回來的信息。
socket.on("loginSuccess",function(data){ if(data.username === uname){ checkin(data) }else{ alert("用戶名不匹配,請重試") } }) function checkin(data){ /*隱藏登陸界面,顯示聊天主頁*/ $(".login-wrap").hide("slow"); $(".chat-wrap").show("slow"); }
通過以上4步,一次成功的登陸請求就成功了。
關于全頻道廣播功能
項目中提到了全頻道的廣播的功能,而io.sockets.emit的定義是服務端進行全頻道廣播,也就是對所有客戶端進行廣播,也跟我們常常在聊天中收到的官方推送一樣。
io.sockets.emit("leave",username)
當用戶進入或者離開時,會進行全頻道廣播,也就是通過io.sockets.emit方法進行。
最后感謝@一岑不再博主所寫的demo項目,讓我受益匪淺。
一岑博主主要文章傳送門:鏈接描述
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95768.html
摘要:思路這個分為客戶端,控制端和服務端。客戶端是一個用寫的三維的長方體,只接受數據。控制端使用事件來獲取手機姿態并通過發送姿態數據。附之前寫過兩篇文章是關于用制作立方體和使用搭建聊天室對本文有點借鑒意義。 思路 這個 Demo 分為客戶端,控制端和服務端。客戶端是一個用css3寫的三維的長方體,只接受websocket數據。控制端使用deviceorientation事件來獲取手機姿態并通...
摘要:思路這個分為客戶端,控制端和服務端。客戶端是一個用寫的三維的長方體,只接受數據。控制端使用事件來獲取手機姿態并通過發送姿態數據。附之前寫過兩篇文章是關于用制作立方體和使用搭建聊天室對本文有點借鑒意義。 思路 這個 Demo 分為客戶端,控制端和服務端。客戶端是一個用css3寫的三維的長方體,只接受websocket數據。控制端使用deviceorientation事件來獲取手機姿態并通...
閱讀 2448·2021-10-14 09:42
閱讀 1139·2021-09-22 15:09
閱讀 3545·2021-09-09 09:33
閱讀 3026·2021-09-07 09:59
閱讀 3639·2021-09-03 10:34
閱讀 3532·2021-07-26 22:01
閱讀 2822·2019-08-30 13:06
閱讀 1203·2019-08-30 10:48