更新時(shí)間:2023年07月06日11時(shí)37分 來(lái)源:傳智教育 瀏覽次數(shù):
WebSocket 是基于 TCP 的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信——瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就可以創(chuàng)建持久性的連接, 并進(jìn)行雙向數(shù)據(jù)傳輸。
HTTP協(xié)議和WebSocket協(xié)議對(duì)比:
HTTP是短連接,WebSocket是長(zhǎng)連接。
HTTP通信是單向的,基于請(qǐng)求響應(yīng)模式。WebSocket支持雙向通信。
HTTP和WebSocket底層都是TCP連接。
那既然WebSocket支持雙向通信,功能看似比HTTP強(qiáng)大,那么我們是不是可以基于WebSocket開(kāi)發(fā)所有的業(yè)務(wù)功能?
不能,WebSocket并不能完全取代HTTP,WebSocket服務(wù)器長(zhǎng)期維護(hù)長(zhǎng)連接需要一定的成本,各個(gè)瀏覽器支持程度不一。WebSocket 是長(zhǎng)連接,受網(wǎng)絡(luò)限制比較大,需要處理好重連,它只適合在特定的場(chǎng)景下使用。
下面以外賣(mài)平臺(tái)商家端的來(lái)單提醒為例,演示W(wǎng)ebSocket的使用。
需求分析和設(shè)計(jì)
用戶下單并且支付成功后,需要第一時(shí)間通知外賣(mài)商家。通知的形式有語(yǔ)音播報(bào)和彈出提示框兩種。
通過(guò)WebSocket實(shí)現(xiàn)管理端頁(yè)面和服務(wù)端保持長(zhǎng)連接狀態(tài),當(dāng)客戶支付后,調(diào)用WebSocket的相關(guān)API實(shí)現(xiàn)服務(wù)端向客戶端推送消息??蛻舳藶g覽器解析服務(wù)端推送的消息,判斷是來(lái)單提醒還是客戶催單,進(jìn)行相應(yīng)的消息提示和語(yǔ)音播報(bào)。
約定服務(wù)端發(fā)送給客戶端瀏覽器的數(shù)據(jù)格式為JSON,字段包括:type,orderId,content
- type 為消息類(lèi)型,1為來(lái)單提醒 2為客戶催單。
- orderId 為訂單id。
- content 為消息內(nèi)容。
在OrderServiceImpl中注入WebSocketServer對(duì)象,修改paySuccess方法,加入如下代碼:
Map map = new HashMap(); map.put("type", 1);//通知類(lèi)型 1來(lái)單提醒 2客戶催單 map.put("orderId", orders.getId());//訂單idmap.put("content","訂單號(hào):" + outTradeNo); webSocketServer.sendToAllClient(JSON.toJSONString(map));
添加代碼后查看瀏覽器調(diào)試工具數(shù)據(jù)交互過(guò)程,和前后端聯(lián)調(diào)情況,顯示正常則表示添加成功。
北京校區(qū)