激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - 編程技術(shù) - 搭建websocket消息推送服務(wù),必須要考慮的幾個問題

搭建websocket消息推送服務(wù),必須要考慮的幾個問題

2020-07-11 16:23GoEasy 編程技術(shù)

面對各種新場景對websocket功能和性能越來越高的需求,不同的團(tuán)隊(duì)有不同的選擇,下面給大家分享構(gòu)建websocket服務(wù)時必須要考慮的一些技術(shù)特性以及能顯著提高用戶體驗(yàn)的功能,感興趣的朋友跟隨小編一起看看吧

近年,不論是正在快速增長的直播,遠(yuǎn)程教育以及IM聊天場景,還是在常規(guī)企業(yè)級系統(tǒng)中用到的系統(tǒng)提醒,對websocket的需求越來越大,對websocket的要求也越來越高。從早期對websocket的應(yīng)用僅限于少部分功能和IM等特殊場景,逐步發(fā)展為追求支持高并發(fā),百萬、千萬級每秒通訊的高可用websocket服務(wù)。

搭建websocket消息推送服務(wù),必須要考慮的幾個問題

面對各種新場景對websocket功能和性能越來越高的需求,不同的團(tuán)隊(duì)有不同的選擇,有的直接使用由專業(yè)團(tuán)隊(duì)開發(fā)的成熟穩(wěn)定的第三方websocket服務(wù),有些則選擇自建websocket服務(wù)。

作為一個具有多年websocket開發(fā)經(jīng)驗(yàn)的老程序猿,經(jīng)歷了GoEasy企業(yè)級websocket服務(wù)從無到有,從小到大的過程,此文是根據(jù)過去幾年在GoEasy開發(fā)過程中踩過的坑,以及為眾多開發(fā)團(tuán)隊(duì)提供websocket服務(wù)、與眾多開發(fā)者交流中的總結(jié)的一些經(jīng)驗(yàn)和體會。

這次主要從搭建websocket服務(wù)的基本功能和特性方面做一些分享,下次有機(jī)會再從構(gòu)建一個高可用websocket時要面對的高并發(fā),海量消息,集群容災(zāi),橫向擴(kuò)展,以及自動化運(yùn)維等方面進(jìn)更多的分享。

以下幾點(diǎn)是個人認(rèn)為在構(gòu)建websocket服務(wù)時必須要考慮的一些技術(shù)特性以及能顯著提高用戶體驗(yàn)的功能,供各位同學(xué)參考:

1.建立心跳機(jī)制
心跳機(jī)制幾乎是所有網(wǎng)絡(luò)編程的第一步,經(jīng)常容易被新手忽略。因?yàn)樵?code>websocket長連接中,客戶端和服務(wù)端并不會一直通信,如果雙方長期沒有溝通則都不清楚彼此當(dāng)前狀態(tài),所以需要發(fā)送一段很小的報文告訴對方“我還活著”。另外還有兩個目的:
服務(wù)端檢測到某個客戶端遲遲沒有心跳過來可以主動關(guān)閉通道,讓它下線;
客戶端檢測到某個服務(wù)端遲遲沒有響應(yīng)心跳也能重連獲取一個新的連接。

2.建立具有良好兼容性的客戶端SDK
雖說現(xiàn)在主流瀏覽器都支持websocket,但在編碼中還是會遇到瀏覽器兼容性問題,而且通過websocket通信的客戶端早已不僅限于各種web瀏覽器,還包括越來越多的APP,小程序。因此就要求構(gòu)建的websocket服務(wù)必須能夠很友好的支持各種客戶端。最好的方式就是構(gòu)建一個能夠兼容所有主流瀏覽器、小程序和APP,以及uni-app、vue、react-native等目前常見的各種前端框架的客戶端SDK,這樣不論公司的各個項(xiàng)目使用什么樣的前端技術(shù),都能夠快速的集成websocket服務(wù)。

3.斷網(wǎng)自動重連和消息補(bǔ)發(fā)機(jī)制
移動互聯(lián)網(wǎng)時代,終端用戶所處的網(wǎng)絡(luò)環(huán)境多樣且復(fù)雜,如用戶進(jìn)出電梯,出入地下室或地鐵等網(wǎng)絡(luò)不穩(wěn)定的場所,或其他原因?qū)е碌木W(wǎng)絡(luò)不穩(wěn)定都是很常見的場景。因此,一個可靠的websocket服務(wù)必須具備完善的斷網(wǎng)自動重連機(jī)制。確保斷網(wǎng)后,網(wǎng)絡(luò)一旦恢復(fù),能第一時間自動重新建立長連接,并且能夠立即補(bǔ)發(fā)在網(wǎng)絡(luò)不穩(wěn)定期間發(fā)送的消息。

4.離線消息
基礎(chǔ)的Websocket通訊從技術(shù)上來說,消息送達(dá)的前提條件就是建立起一個長連接,沒有建立網(wǎng)絡(luò)連接就來討論通訊那是耍流氓。但是從使用者的角度上來說,隨手關(guān)閉瀏覽器,或者將小程序、APP進(jìn)程直接殺掉而導(dǎo)致網(wǎng)絡(luò)連接斷開的情況是隨時都在發(fā)生的。然后我們下意識的期待,就是我下次打開瀏覽器訪問網(wǎng)頁,或者打開APP時,能夠收到用戶離開系統(tǒng)期間的所有信息。從技術(shù)上這是一個跟websocket沒有多大關(guān)系的需求,但實(shí)際上卻是websocket服務(wù)不可或缺的基本特性,也是一個能夠極大提升用戶體驗(yàn)的功能。

5.上下線提醒,客戶端在線列表
掌握當(dāng)前系統(tǒng)有哪些用戶在線,捕捉用戶上下線事件,是搭建一個企業(yè)級websocket服務(wù),必不可少的特性,尤其是開發(fā)IM和游戲類產(chǎn)品。

6.支持歷史消息查詢
websocket服務(wù),某種意義也是屬于一個消息系統(tǒng),對于歷史消息的查詢需求,是無法繞開的話題。比如IM系統(tǒng)中常見的歷史消息,因此在websocket服務(wù)內(nèi)部實(shí)現(xiàn)一個高速,可靠的消息隊(duì)列機(jī)制來支持websocket服務(wù)實(shí)現(xiàn)歷史消息的查詢就是一個必須的工作。

7.消息的壓縮機(jī)制
不論是為了保證消息通訊的速度和實(shí)時性,還是為了節(jié)約流量和帶寬費(fèi)用,或者是出于提高網(wǎng)卡的使用效率和增加系統(tǒng)的吞吐量,在通訊過程中對消息進(jìn)行必要的壓縮都是必不可少的。

除了需要考慮以上七點(diǎn)以外,筆者認(rèn)為,還有幾個問題也是很值得初學(xué)者積極關(guān)注的:

1.緩存和持久化
選擇合適的消息緩存機(jī)制,是企業(yè)級websocket服務(wù)保證性能必須要考慮的問題。

2.異步調(diào)用
要支持大量消息通訊的高性能系統(tǒng),必然推薦異步調(diào)用。若設(shè)計為同步調(diào)用,調(diào)用方就需要一直等待被調(diào)用方完成。如果一層一層的同步調(diào)用下去,所有的調(diào)用方需要相同的等待時間,調(diào)用方的資源會被大量的浪費(fèi)。更糟糕的是一旦被調(diào)用方出問題,其他調(diào)用就會出現(xiàn)多米諾骨牌效應(yīng)跟著出問題,導(dǎo)致故障蔓延。收到請求立即返回結(jié)果,然后再異步執(zhí)行,不僅可以增加系統(tǒng)的吞吐量,最大的好處是讓服務(wù)之間的解耦更為徹底。

3.獨(dú)立于業(yè)務(wù)和標(biāo)準(zhǔn)化
盡管在一個web項(xiàng)目中可以同時存在常規(guī)http服務(wù)和websocket服務(wù),尤其對性能要求不高的單應(yīng)用web系統(tǒng),這種方式更簡單,更便于維護(hù)。但對于性能和可用性高的企業(yè)級系統(tǒng)或者互聯(lián)網(wǎng)平臺,更好的方式,是將websocket服務(wù)作為一個單獨(dú)的微服務(wù)來進(jìn)行設(shè)計,避免和常規(guī)的http服務(wù)搶占資源,導(dǎo)致系統(tǒng)性能不可控,同時也更便于橫向擴(kuò)展。

一個設(shè)計良好的企業(yè)級websocket服務(wù)應(yīng)該是一個獨(dú)立于業(yè)務(wù)系統(tǒng)、標(biāo)準(zhǔn)化的單獨(dú)存在的技術(shù)性微服務(wù),能夠作為公司基礎(chǔ)架構(gòu)的一部分為公司的所有項(xiàng)目提供通訊服務(wù)。

4.冪等性和重復(fù)消息的過濾
所謂冪等性,就是一次和多次請求一個接口都應(yīng)該具有同樣的后果。為什么需要?對每個接口的調(diào)用都會有三種可能的結(jié)果:成功,失敗和超時。對最后一種的原因很多可能是網(wǎng)絡(luò)丟包,可能請求沒有到達(dá),也有可能返回沒有收到。于是在對接口的調(diào)用時往往都會有重試機(jī)制,但重試機(jī)制很容易導(dǎo)致消息的重復(fù)發(fā)送,從用戶層面這往往是不可接受的,因此在接口的設(shè)計時,我們就需要考慮接口的冪等性,確保同一條消息發(fā)送一次和十次都不回導(dǎo)致消息的重復(fù)到達(dá)。

5.支持QoS 服務(wù)質(zhì)量分級
其實(shí)對于上一點(diǎn)消息重復(fù)的問題,行業(yè)已經(jīng)有了解決方案和標(biāo)準(zhǔn)規(guī)范,對于消息到達(dá)率和重復(fù),常用的手段就是通過消息確認(rèn)的方式來確保消息到達(dá),要求越高,意味著確認(rèn)機(jī)制越復(fù)雜,成本越高。為了在成本和到達(dá)率之間有很好的平衡,通常對消息系統(tǒng)的服務(wù)質(zhì)量(QoS)分為以下三個級別 :

QoS 0(At most once):“最多發(fā)一次”,意味著發(fā)送就可以了,不需要確認(rèn)機(jī)制,發(fā)送了即可,適用于要求不高的場景,可以接受一定的不到達(dá)率,成本最低。

QoS 1(At least once):“至少發(fā)一次”,意味著發(fā)送方必須明確收到接收方的確認(rèn)信號,否則就會反復(fù)發(fā),每條消息至少需要兩次通信來確認(rèn)到達(dá),可以接受一些消息被重發(fā),但成本不高 。

QoS 2(Exactly once):“確保只發(fā)一次”,意味著每條消息只能到達(dá)一次,且不允許重復(fù)到達(dá),為了達(dá)到這個目標(biāo)就需要雙方至少通訊三次,成本最高。

一個完善的websocket服務(wù)面對不同的應(yīng)用場景,應(yīng)該能夠支持選擇不同等級的QoS,在成本和服務(wù)質(zhì)量之間取得平衡。

最后
雖然websocket已經(jīng)廣泛的應(yīng)用于各種系統(tǒng)和平臺,但如果要搭建一個滿足企業(yè)級或者大型互聯(lián)網(wǎng)平臺的可靠、安全穩(wěn)定的websocket服務(wù),對于沒有經(jīng)驗(yàn)的同學(xué),在具體的技術(shù)實(shí)踐過程依然是有不少的坑要踩。

對websocket服務(wù)有較高要求,選擇成熟可靠的第三方websocket服務(wù)其實(shí)也是一個成本更低和高效的選擇。GoEasy作為國內(nèi)領(lǐng)先的第三方websocket消息平臺,已經(jīng)穩(wěn)定運(yùn)行了5年時間,支持千萬級消息并發(fā),除了兼容所有常見的瀏覽器以外,同時也兼容uni-app,各種小程序,以及vue、react-native等常見的前端框架。

希望本文能為初次搭建websocket服務(wù)的同學(xué)在思路上有所幫助和參考,也歡迎各位前輩多多批評指正,同時也希望未來有機(jī)會就更多的技術(shù)與大家進(jìn)行交流。

GoEasy官網(wǎng):https://www.goeasy.io/

到此這篇關(guān)于搭建websocket消息推送服務(wù),必須要考慮的幾個問題的文章就介紹到這了,更多相關(guān)websocket消息推送服務(wù)內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 欧美成人精品一区二区 | 午夜爽爽爽男女免费观看hd | 精品国产专区 | 亚洲性一区 | 亚洲一区二区免费 | 久久精品亚洲欧美日韩精品中文字幕 | 原来神马影院手机版免费 | 欧美h版在线观看 | 欧美成人做爰高潮片免费视频 | 精品亚洲va在线va天堂资源站 | 国产精品久久久久久久久久久久久久久 | 91aa.app| 神马久久蜜桃 | 55夜色66夜色国产精品视频 | 成人免费观看在线 | 免费在线成人网 | 欧美在线观看黄色 | 可以看逼的视频 | avav在线播放 | 看一级毛片 | 美女视频网站黄色 | 久久亚洲精品久久国产一区二区 | 夜夜夜精品视频 | 欧美a在线 | 国产91九色在线播放 | 毛片免费看电影 | 看片一区二区三区 | 亚洲精品成人久久 | 久久成人免费网站 | 综合精品视频 | 欧洲狠狠鲁 | 一级毛片在线免费观看视频 | 中文字幕在线第二页 | 视频一区 中文字幕 | 欧美日韩一区二区综合 | 蜜桃久久一区二区三区 | 久久久久久久一区二区 | 麻豆一二区 | 成人免费网站在线观看视频 | 国产黄色录像片 | 高清不卡一区二区 |