1稚矿、什么是webSocket
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議,跟http協(xié)議基本上沒有關(guān)系橡淑,相對于HTTP這種非持久的協(xié)議來說悉尾,Websocket是一個持久化的協(xié)議主儡。它實現(xiàn)了瀏覽器與服務器的全雙工通信暑诸,擴展了瀏覽器與服務端的通信功能逗威,使服務端也能主動向客戶端發(fā)送數(shù)據(jù)峰搪。
2、webSocket有什么作用
當我們在開發(fā)一些實時性數(shù)據(jù)功能時凯旭,可能通常會用到ajax或者刷新頁面概耻,多少秒執(zhí)行一次這樣的方式去獲取新數(shù)據(jù),由于之前采用的是http協(xié)議罐呼,http協(xié)議開銷較大鞠柄,這樣長久下去,會對系統(tǒng)本身性能有一定犧牲嫉柴。所以webSocket的出現(xiàn)解決了這個問題厌杜,可以做如下常見的兩件事情
????①web即時通訊
????②Web開發(fā)中對數(shù)據(jù)實時性要求較高的功能
3、webSocket實現(xiàn)一個簡單web版的即時通訊功能
? ? 即時通訊最重要的就是消息的即時性计螺,實際上聊天軟件的功能無非就是單聊和群聊夯尽,webSocket里面也有廣播和點對點,可以實現(xiàn)我們需要的功能登馒,點對點自然不用說匙握,下面也會有相應的演示,群聊其實就是多對多陈轿,我們可以用redis這樣的內(nèi)存數(shù)據(jù)庫區(qū)存放每個用戶對于的聯(lián)系人列表和群聊列表圈纺,當用戶選擇哪個聯(lián)系人或者群聊進行聊天時,將聯(lián)系人或者群聊的ID發(fā)送的后臺進行發(fā)送消息麦射。
? ? ? ?1)蛾娶、如果用戶選擇某一個聯(lián)系人,點擊發(fā)送消息時潜秋,后臺接受到數(shù)據(jù)應該為:發(fā)送者ID+接受者ID+消息內(nèi)容蛔琅,這樣在調(diào)用webSocket的發(fā)送消息方法前,取出對應聯(lián)系人的session半等,然后調(diào)用session.getBasicRemote().sendText("這里是發(fā)送的消息")揍愁,即可對對應聯(lián)系人發(fā)送消息。
? ? ? ? 2)杀饵、如果用戶在群聊中發(fā)送消息莽囤,點擊發(fā)送消息時,后臺接受數(shù)據(jù)應該為:發(fā)送者ID+群聊ID+消息內(nèi)容切距,通過群聊ID可以取出所有群聊里面的人信息朽缎,然后循環(huán)出每一個人的ID,通過ID分別取出每個人對應的session,然后調(diào)用session.getBasicRemote().sendText("這里是發(fā)送的消息")话肖,即可實現(xiàn)群聊發(fā)送消息北秽。
? ? 下面是實現(xiàn)簡單點對點單聊的效果,讀者感興趣或者想擴展可以下載源碼進行進一步編寫。
? ? 第一步:用戶xiaojing上線,我們會發(fā)現(xiàn)右側(cè)的聯(lián)系人列表沒有一個人参袱。
? ? 第二步:
? ? 此時另一個用戶jianjian上線泄私,我們可以看到用戶xiaojing和jianjan右側(cè)聯(lián)系人列表出現(xiàn)了對方
第三步:雙擊聯(lián)系人jianjian,然后發(fā)送消息進行聊天,也就是說用戶xiaojing,發(fā)送消息“你好”后,用戶jianjian會立即受到對應的消息
第四步:用戶jianjian回消息扬蕊,然后開始聊天
源碼地址:鏈接:https://pan.baidu.com/s/1geBnvkn 密碼:dysg