01websocket簡(jiǎn)介及優(yōu)勢(shì)
1.websocket簡(jiǎn)介:
websocket 是一種雙向通信協(xié)議泼返,在建立連接后硝逢,websocket服務(wù)端和客戶端都能主動(dòng)向?qū)Ψ桨l(fā)送或者接收數(shù)據(jù),而在http協(xié)議中绅喉,一個(gè)request只能有一個(gè)response渠鸽,而且這個(gè)response也是被動(dòng)的,不能主動(dòng)發(fā)起柴罐。
2.websocket優(yōu)勢(shì):
當(dāng)服務(wù)器完成協(xié)議升級(jí)后(HTTP->Websocket)徽缚,服務(wù)端就可以主動(dòng)推送信息給客戶端啦。
就變成了這樣革屠,只需要經(jīng)過(guò)一次HTTP請(qǐng)求凿试,就可以做到源源不斷的信息傳送了。(在程序設(shè)計(jì)中似芝,這種設(shè)計(jì)叫做回調(diào)红省,即:你有信息了再來(lái)通知我,而不是我傻乎乎的每次跑來(lái)問(wèn)你)
這樣的協(xié)議解決了上面同步有延遲国觉,而且還非常消耗資源的這種情況吧恃。
02WebSocket插件安裝及使用
1、安裝ws插件麻诀,并重啟jmeter
2痕寓、WebSocket的使用
重啟jmeter 后,添加線程組蝇闭,右鍵添加取樣器呻率,會(huì)出現(xiàn)WebSocket 相關(guān)插件
(1)不勾選streaming
(2)勾上streaming connection
(3)設(shè)置一個(gè)測(cè)試(添加一個(gè)loop controller,設(shè)置循環(huán)次數(shù)為3)
循環(huán)中的sampler都勾選了streaming呻引,最后一個(gè)sampler沒(méi)有勾選此選項(xiàng)礼仗,結(jié)果中可以看出:在loop controller中的sampler使用的是一個(gè)連接,在loop外面的這個(gè)sampler會(huì)打開(kāi)一個(gè)新的連接逻悠,可以得出一個(gè)結(jié)論元践,實(shí)際上,當(dāng)勾選了streaming connection時(shí)童谒,不僅會(huì)在結(jié)束會(huì)話后保留連接单旁,而且勾選了的sampler會(huì)在有可用連接是直接使用,而沒(méi)有勾選的sampler即使存在可用連接也會(huì)重新打開(kāi)一個(gè)新的連接饥伊。因此象浑,如果是要在一個(gè)會(huì)話中發(fā)送多條消息蔫饰,請(qǐng)勾選這個(gè)streamingconnection
(4)輸入request data 查看結(jié)果
03常規(guī)選項(xiàng)解釋
1、WebServer
Server Name or IP:WebSocket發(fā)送的目標(biāo)服務(wù)器的地址或者名稱
Port Number:WebSocker服務(wù)器監(jiān)聽(tīng)的端口號(hào)愉豺。(一般是HTTP 80端口篓吁,可以通過(guò)WireShark數(shù)據(jù)包得到)
2、Timeout
Connection – 發(fā)送一個(gè)連接請(qǐng)求后蚪拦,Jmeter等待連接完成的最長(zhǎng)時(shí)間杖剪,單位是毫秒。
Response - 對(duì)響應(yīng)消息的最大等待時(shí)間外盯。
3、WebSocket Request
Implementation – 只支持RFC6455(v13) 翼雀,WebSocket協(xié)議標(biāo)準(zhǔn)的最新版饱苟。
Protocol – 有ws與wss之分, ws前綴是WebSocket連接的辨別標(biāo)識(shí)狼渊,wss前綴是WebSocket安全連接的辨別標(biāo)識(shí)箱熬。根據(jù)自己的實(shí)際情況填寫(xiě)
Streaming Connection – 選擇這個(gè)TCP session要不要保持,如果勾上標(biāo)識(shí)連接會(huì)一直存在狈邑,如果沒(méi)有勾上城须,那么得到第一次響應(yīng)后該鏈接就會(huì)被關(guān)閉。
Request data:填入將要發(fā)送的請(qǐng)求米苹,要跟開(kāi)發(fā)溝通好糕伐,這個(gè)是什么格式的消息。
4.WebSocket Response
Response Pattern – 采樣器將等待含有該標(biāo)識(shí)的消息并繼續(xù)通信(或者直到timeout蘸嘶,該連接關(guān)閉)
Close Connection Pattern – 如果服務(wù)器返回的消息含有這樣的字符良瞧,就結(jié)束會(huì)話。
Message Backlog – 定義服務(wù)器返回消息保留的最大長(zhǎng)度训唱。
04WebSocket解決服務(wù)器上消耗資源的原理
其實(shí)我們所用的程序是要經(jīng)過(guò)兩層代理的褥蚯,即HTTP協(xié)議在Nginx等服務(wù)器的解析下,然后再傳送給相應(yīng)的Handler(PHP等)來(lái)處理况增。
簡(jiǎn)單地說(shuō):我們有一個(gè)非吃奘快速的接線員(Nginx),他負(fù)責(zé)把問(wèn)題轉(zhuǎn)交給相應(yīng)的客服(Handler)澳骤。
本身接線員基本上速度是足夠的歧强,但是每次都卡在客服(Handler)了,老有客服處理速度太慢为肮,導(dǎo)致客服不夠誊锭。
Websocket就解決了這樣一個(gè)難題,建立后弥锄,可以直接跟接線員建立持久連接丧靡,有信息的時(shí)候客服想辦法通知接線員蟆沫,然后接線員在統(tǒng)一轉(zhuǎn)交給客戶。這樣就可以解決客服處理速度過(guò)慢的問(wèn)題了温治。
同時(shí)饭庞,在傳統(tǒng)的方式上,要不斷的建立熬荆,關(guān)閉HTTP協(xié)議舟山,由于HTTP是非狀態(tài)性的,每次都要重新傳輸identity info(鑒別信息)卤恳,來(lái)告訴服務(wù)端你是誰(shuí)累盗。雖然接線員很快速,但是每次都要聽(tīng)這么一堆突琳,效率也會(huì)有所下降的若债,同時(shí)還得不斷把這些信息轉(zhuǎn)交給客服,不但浪費(fèi)客服的處理時(shí)間拆融,而且還會(huì)在網(wǎng)路傳輸中消耗過(guò)多的流量/時(shí)間蠢琳。
Websocket只需要一次HTTP握手,所以說(shuō)整個(gè)通訊過(guò)程是建立在一次連接/狀態(tài)中镜豹,也就避免了HTTP的非狀態(tài)性傲须,服務(wù)端會(huì)一直知道你的信息,直到你關(guān)閉請(qǐng)求趟脂,這樣就解決了接線員要反復(fù)解析HTTP協(xié)議泰讽,還要查看identity info的信息。
同時(shí)由客戶主動(dòng)詢問(wèn)昔期,轉(zhuǎn)換為服務(wù)器(推送)有信息的時(shí)候就發(fā)送(當(dāng)然客戶端還是等主動(dòng)發(fā)送信息過(guò)來(lái)的…)菇绵,沒(méi)有信息的時(shí)候就交給接線員(Nginx),不需要占用本身速度就慢的客服(Handler)了镇眷。
05chrome查看WebSocket