總結(jié)了一下知乎高票答案https://www.zhihu.com/question/20215561
websocket是html5協(xié)議,作為http協(xié)議的補(bǔ)充
HTTP的生命周期通過(guò)Request來(lái)界定,也就是一個(gè)Request 一個(gè)Response,那么在HTTP1.0中,這次HTTP請(qǐng)求就結(jié)束了。在HTTP1.1中進(jìn)行了改進(jìn),使得有一個(gè)keep-alive,也就是說(shuō),在一個(gè)HTTP連接中,可以發(fā)送多個(gè)Request,接收多個(gè)Response。但是請(qǐng)記住 Request = Response , 在HTTP中永遠(yuǎn)是這樣,也就是說(shuō)一個(gè)request只能有一個(gè)response。而且這個(gè)response也是被動(dòng)的,不能主動(dòng)發(fā)起。
但是http協(xié)議是非持續(xù)性的
服務(wù)器很懶,它不會(huì)主動(dòng)法res給前端,只有前端不停的問(wèn)他
可以作為長(zhǎng)連接的方式有l(wèi)ong poll,還有ajax輪詢
ajax輪詢:很簡(jiǎn)單就是不停的發(fā)起請(qǐng)求嘛
前端:有嗎?
后臺(tái):沒(méi)有
前端:有嗎?
后臺(tái):哎喲沒(méi)有啦
long poll:是采取阻塞機(jī)制,打電話,后臺(tái)不接我就不掛
這兩種方式的缺點(diǎn)很明顯。ajax輪詢需要服務(wù)器有很快的處理速度和資源。long poll需要有很高的并發(fā),也就是說(shuō)同時(shí)接待客戶的能力。
然而websocket卻可以實(shí)現(xiàn),建立好連接以后,能讓服務(wù)器主動(dòng)發(fā)消息給前端啦哈哈哈
客戶端:啦啦啦,我要建立Websocket協(xié)議,需要的服務(wù):chat,Websocket協(xié)議版本:17(HTTP Request)
服務(wù)端:ok,確認(rèn),已升級(jí)為Websocket協(xié)議(HTTP Protocols Switched)
客戶端:麻煩你有信息的時(shí)候推送給我噢。。服務(wù)端:ok,有的時(shí)候會(huì)告訴你的。
服務(wù)端:balabalabalabala
服務(wù)端:balabalabalabala
只需要經(jīng)過(guò)一次HTTP請(qǐng)求,就可以做到源源不斷的信息傳送了
還有一點(diǎn)websocket可以建立久連接,久連接,久連接。解決資源問(wèn)題,有信息的時(shí)候客服想辦法通知前端,然后前端在統(tǒng)一轉(zhuǎn)交給后臺(tái)。