基于 Websocket 协议的压力测试
背景
最近客戶端實(shí)現(xiàn)了一個基于websocket的消息推送功能:長連接網(wǎng)絡(luò)開關(guān)下發(fā)開后啟動,然后保持鏈接,每隔15分鐘發(fā)一次心跳包,服務(wù)器有數(shù)據(jù)時(shí)直接下發(fā)生效,因此需要對服務(wù)器進(jìn)行壓測。
本次通過寫python腳本的方法模擬并發(fā)進(jìn)行壓力測試,相關(guān)測試方法如下。
什么是websocket協(xié)議
WebSocket是一種在單個TCP連接上進(jìn)行全雙工通訊的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936補(bǔ)充規(guī)范。
WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocketAPI中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。
?
測試場景
1.并發(fā)創(chuàng)建長連接,3min內(nèi)建立連接22w,總連接數(shù)維持在22w左右,間歇下發(fā)通知,查看服務(wù)器的穩(wěn)定性。
2.并發(fā)創(chuàng)建長連接,間歇性斷開并重連,保證同時(shí)在線的長連接在22w左右,運(yùn)行12H,查看服務(wù)器的穩(wěn)定性。
?
測試步驟
1.編寫腳本實(shí)現(xiàn)并發(fā)請求并發(fā)
?
2.搭建測試環(huán)境
①找1臺liunx機(jī)器,搭建python運(yùn)行環(huán)境,安裝腳本支持的包、模塊
②運(yùn)行websocket腳本,保證腳本正常運(yùn)行
③ 編寫run_test.sh腳本,運(yùn)行多個websocket.py,單機(jī)大約可同時(shí)并發(fā)大約5w~6w的tcp鏈接,視linux 系統(tǒng)內(nèi)核而定(因?yàn)楸敬涡枰瑫r(shí)并發(fā)22w,共4臺liunx機(jī)器,所以單臺并發(fā)6w左右)。
?
?
問題總結(jié)
1.有些linux系統(tǒng)最大tcp鏈接數(shù)比較小,無法支持同時(shí)并發(fā)6w量的tcp鏈接。
2.原因:
最大tcp連接數(shù)和系統(tǒng)允許打開的最大文件數(shù),用戶允許打開的最大文件數(shù),TCP網(wǎng)絡(luò)連接可用的端口范圍有關(guān),取上述的最小值。
3.一般的設(shè)置規(guī)則為:系統(tǒng)最大文件數(shù)>可用端口>用戶最大文件數(shù)
總結(jié)
以上是生活随笔為你收集整理的基于 Websocket 协议的压力测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中地数码:融合创新国产GIS 乘风而上助
- 下一篇: 比尔沃服务器位置,防辐射植物哪个更好?