最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解nginx代理socket.io服務(wù)踩坑

 更新時(shí)間:2018年10月30日 08:35:37   作者:youmai の Blog  
這篇文章主要介紹了詳解nginx代理socket.io服務(wù)踩坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

nginx代理了兩臺(tái)socket.io服務(wù)器。socket.io的工作模式是polling升級(jí)到websocket

現(xiàn)象

通過nginx請(qǐng)求服務(wù)時(shí),出現(xiàn)了大量的400錯(cuò)誤,有時(shí)候能升級(jí)到websocket,有時(shí)候會(huì)一直報(bào)錯(cuò)。但是直接通過 ip+端口 訪問時(shí),100%能成功。

分析

sid

sid是我們這個(gè)問題的關(guān)鍵。在初始創(chuàng)建連接時(shí)(polling模式就是在模擬一個(gè)長連接),客戶端會(huì)發(fā)起這樣的請(qǐng)求:

https://***/?EIO=3&transport=polling&t=1540820717277-0

服務(wù)端收到后會(huì)創(chuàng)建一個(gè)對(duì)象,綁定在這個(gè)連接上,同時(shí)返回一個(gè)sid(session id),來標(biāo)記這個(gè)會(huì)話。會(huì)話指什么呢,會(huì)話是一連串的交互,這些交互之間是有聯(lián)系的,在我們這個(gè)場景下就是,下一次的http請(qǐng)求到來,我需要找到之前綁定在理論上的長連接(這里還沒有websocket,所以是理論上的)上的那個(gè)對(duì)象。我們知道http請(qǐng)求是無狀態(tài)的,每個(gè)請(qǐng)求之間獨(dú)立,所以socket.io引入了sid來做這件事。服務(wù)端收到請(qǐng)求后會(huì)生成一個(gè)sid,看下response:

復(fù)制代碼 代碼如下:
{"sid":"EoGaL3fRQlpTOaLp5eST","upgrades":["websocket"],"pingInterval":8000,"pingTimeout":10000}

之后每次請(qǐng)求都需要帶上這個(gè)sid,建立websocket請(qǐng)求的連接也不例外。所以說,sid是polling,以及polling升級(jí)到websocket的關(guān)鍵。這之后的請(qǐng)求類似于:

https://***/?EIO=3&transport=polling&t=1540820717314-1&sid=EoGaL3fRQlpTOaLp5eST

or

wss://***/?EIO=3&transport=websocket&t=1540820717314-1&sid=EoGaL3fRQlpTOaLp5eST

那么問題來了,如果請(qǐng)求是帶上的sid不是服務(wù)端生成的會(huì)怎樣呢?服務(wù)端會(huì)不認(rèn)識(shí),給你返回一個(gè)400,并告訴你

invalid sid

我們遇到的便是這個(gè)問題,nginx默認(rèn)的負(fù)載均衡策略是輪詢,所以請(qǐng)求有可能會(huì)打到不是生成這個(gè)sid的機(jī)器上去,這時(shí)候我們就會(huì)收到一個(gè)400,如果運(yùn)氣好,可能也會(huì)打到原來的機(jī)器上,運(yùn)氣更好一點(diǎn),甚至能堅(jiān)持到websocket連接建立。

解決

這里提出兩種方案

  1. nginx的負(fù)載均衡采用ip_hash,這樣能保證一個(gè)客戶端的請(qǐng)求都走到一臺(tái)服務(wù)器上
  2. 不使用polling模式,只使用websocket

這兩種方案各有利弊。第二種顯而易見,不支持websocket的古老瀏覽器和客戶端將沒法工作。第一種的問題隱藏得比較深,試想,如果你增減了機(jī)器會(huì)怎樣,這時(shí)候ip_hash策略的模將變化,之前的連接將全部失效,而對(duì)于微服務(wù),擴(kuò)縮容是很頻繁的操作(特別是產(chǎn)品處于發(fā)展期),這種有損的擴(kuò)縮容很大概率是不能接受的。

綜上,建議直接使用websocket,畢竟不支持websocket的老版本占比很少,而且相對(duì)于先polling,耗時(shí)也會(huì)減少。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Nginx創(chuàng)建臨時(shí)和永久重定向的具體示例

    使用Nginx創(chuàng)建臨時(shí)和永久重定向的具體示例

    HTTP 重定向 是將一個(gè)域名或地址指向另一個(gè)的方法,有幾種不同類型的重定向,每種對(duì)客戶端瀏覽器意味著不同的事情,最常見的兩種類型是臨時(shí)重定向和永久重定向,本文給大家介紹了使用Nginx創(chuàng)建臨時(shí)和永久重定向的具體示例,需要的朋友可以參考下
    2024-07-07
  • nginx+lua(openresty)實(shí)現(xiàn)黑/白名單權(quán)限控制的示例

    nginx+lua(openresty)實(shí)現(xiàn)黑/白名單權(quán)限控制的示例

    本文介紹了如何使用Openresty進(jìn)行權(quán)限控制和灰度發(fā)布,具體通過定時(shí)器定期更新黑名單數(shù)據(jù),進(jìn)行用戶過濾和權(quán)限管控,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • Nginx如何提高Web應(yīng)用的性能和安全性

    Nginx如何提高Web應(yīng)用的性能和安全性

    現(xiàn)在越來越多的應(yīng)用都離不開Web應(yīng)用,但Web應(yīng)用的性能問題也越來越成為企業(yè)關(guān)注的焦點(diǎn),而Nginx作為一款高性能的Web服務(wù)器和反向代理服務(wù)器,能夠?yàn)槠髽I(yè)帶來很多優(yōu)勢,Nginx的應(yīng)用場景非常廣泛,對(duì)于Web應(yīng)用的優(yōu)化、安全性的提升有著非常重要的作用
    2023-11-11
  • Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式小結(jié)

    Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式小結(jié)

    Apache是一個(gè)模型化的服務(wù)器,可以運(yùn)行在幾乎所有的服務(wù)器上。其屬于應(yīng)用服務(wù)器,這篇文章主要介紹了Apache和Nginx實(shí)現(xiàn)虛擬主機(jī)的3種方式,需要的朋友可以參考下
    2023-11-11
  • Nginx根據(jù)url中的path動(dòng)態(tài)轉(zhuǎn)發(fā)到upstream的實(shí)現(xiàn)

    Nginx根據(jù)url中的path動(dòng)態(tài)轉(zhuǎn)發(fā)到upstream的實(shí)現(xiàn)

    這篇文章主要介紹了Nginx根據(jù)url中的path動(dòng)態(tài)轉(zhuǎn)發(fā)到upstream的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 解決方案之關(guān)于Nginx高可用方案

    解決方案之關(guān)于Nginx高可用方案

    這篇文章主要介紹了解決方案之關(guān)于Nginx高可用方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • nginx部署前端項(xiàng)目location時(shí)root和alias配置指南

    nginx部署前端項(xiàng)目location時(shí)root和alias配置指南

    nginx指定文件路徑有兩種方式root和alias,下面這篇文章主要給大家介紹了關(guān)于nginx部署前端項(xiàng)目location時(shí)root和alias配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Nginx帶寬控制(限速模塊使用)

    Nginx帶寬控制(限速模塊使用)

    這篇文章主要介紹了Nginx帶寬控制(限速模塊使用),本文講解了使用limit_rate和limit_rate_aft以及l(fā)imit_conn實(shí)現(xiàn)帶寬控制的例子,需要的朋友可以參考下
    2015-03-03
  • linux服務(wù)器部署tomcat和Nginx的教程

    linux服務(wù)器部署tomcat和Nginx的教程

    這篇文章主要為大家詳細(xì)介紹了linux服務(wù)器部署tomcat和Nginx的教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Nginx部署vue項(xiàng)目和配置代理的問題解析

    Nginx部署vue項(xiàng)目和配置代理的問題解析

    這篇文章主要介紹了Nginx部署vue項(xiàng)目和配置代理,需本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,要的朋友可以參考下
    2021-08-08

最新評(píng)論

庄浪县| 马龙县| 平谷区| 新和县| 松江区| 蒙山县| 定结县| 梧州市| 西充县| 黄陵县| 汽车| 永吉县| 郯城县| 怀化市| 井研县| 静宁县| 平凉市| 周宁县| 台州市| 云和县| 遂宁市| 包头市| 图木舒克市| 白玉县| 子洲县| 防城港市| 茂名市| 虎林市| 麦盖提县| 旺苍县| 沙田区| 桦川县| 石首市| 泗阳县| 临漳县| 腾冲县| 定南县| 望都县| 平遥县| 东兴市| 南宁市|