麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > Nginx > 正文

詳解nginx代理socket.io服務踩坑

2024-08-30 12:30:00
字體:
來源:轉載
供稿:網友

nginx代理了兩臺socket.io服務器。socket.io的工作模式是polling升級到websocket

現象

通過nginx請求服務時,出現了大量的400錯誤,有時候能升級到websocket,有時候會一直報錯。但是直接通過 ip+端口 訪問時,100%能成功。

nginx,代理,socket.io

分析

sid

sid是我們這個問題的關鍵。在初始創建連接時(polling模式就是在模擬一個長連接),客戶端會發起這樣的請求:

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

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

 

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

 

之后每次請求都需要帶上這個sid,建立websocket請求的連接也不例外。所以說,sid是polling,以及polling升級到websocket的關鍵。這之后的請求類似于:

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

那么問題來了,如果請求是帶上的sid不是服務端生成的會怎樣呢?服務端會不認識,給你返回一個400,并告訴你

invalid sid

我們遇到的便是這個問題,nginx默認的負載均衡策略是輪詢,所以請求有可能會打到不是生成這個sid的機器上去,這時候我們就會收到一個400,如果運氣好,可能也會打到原來的機器上,運氣更好一點,甚至能堅持到websocket連接建立。

解決

這里提出兩種方案

  1. nginx的負載均衡采用ip_hash,這樣能保證一個客戶端的請求都走到一臺服務器上
  2. 不使用polling模式,只使用websocket

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 人人玩人人爽 | 久久精品国产一区二区电影 | 免费的性生活视频 | 日韩黄色影视 | 成人毛片av在线 | 男女污视频在线观看 | 少妇一级淫片免费放播放 | 国产三级a三级三级 | 亚洲一区二区中文字幕在线观看 | 色人阁导航 | 凹凸成人精品亚洲精品密奴 | 羞羞色网站 | 欧美日韩成人一区二区 | 国产视频在线观看免费 | 国产精品一区二区羞羞答答 | 亚洲影院在线 | 成人午夜在线播放 | 久久精品在线免费观看 | xfplay噜噜av | vidz 98hd| 黄色羞羞视频在线观看 | 一区二区免费看 | 99精品视频在线免费观看 | 色999国产 | 九九热在线视频免费观看 | 精国品产一区二区三区有限公司 | 黄色a级片视频 | 国产精品久久久久久久久久东京 | 婷婷亚洲一区二区三区 | 日韩毛片在线看 | 中国精品久久 | 精品亚洲va在线va天堂资源站 | 一区二区三区播放 | 91精品国产日韩91久久久久久360 | 黄色大片高清 | 一级毛片电影网 | 91羞羞 | 青青青在线免费 | 国产99久久精品 | 国产成年人视频 | 亚洲一区二区在线 |