一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

云服務(wù)器|WEB服務(wù)器|FTP服務(wù)器|郵件服務(wù)器|虛擬主機(jī)|服務(wù)器安全|DNS服務(wù)器|服務(wù)器知識|Nginx|IIS|Tomcat|

服務(wù)器之家 - 服務(wù)器技術(shù) - Nginx - 詳解nginx代理socket.io服務(wù)踩坑

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

2019-12-30 14:19youmai の Blog Nginx

這篇文章主要介紹了詳解nginx代理socket.io服務(wù)踩坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

現(xiàn)象

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

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

分析

sid

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

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

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

 

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

 

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

?
1
2
3
4
5
https://***/?EIO=3&transport=polling&t=1540820717314-1&sid=EoGaL3fRQlpTOaLp5eST
 
or
 
wss://***/?EIO=3&transport=websocket&t=1540820717314-1&sid=EoGaL3fRQlpTOaLp5eST

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

?
1
invalid sid

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

解決

這里提出兩種方案

  1. nginx的負(fù)載均衡采用ip_hash,這樣能保證一個(gè)客戶端的請求都走到一臺服務(wù)器上

  2. 不使用polling模式,只使用websocket

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

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

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

原文鏈接:http://michaelyou.github.io/2018/10/29/nginx代理socket-io服務(wù)踩坑/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 非洲一级毛片又粗又长aaaa | 国产成人无精品久久久 | 国产亚洲视频在线 | 爱爱调教 | b站免费 | 精品suv一区二区三区 | 国产一二区视频 | 狠狠色狠狠色综合曰曰 | 唯美 清纯 另类 亚洲制服 | 青青草一区二区免费精品 | 久久久影院亚洲精品 | 亚欧美综合 | 久久久久国产一级毛片高清片 | 色哟哟观看 | 青青青视频免费线看 视频 青青青青青国产免费手机看视频 | 精品国产mmd在线观看 | 欧美丝袜foot job | 亚洲精品视频导航 | 精品久久久噜噜噜久久7 | 91久久色| 欧美成人免费草草影院视频 | 99精品99 | 亚洲国产精品网站久久 | 扒开大腿狠狠挺进视频 | 日韩中文字幕视频在线观看 | 18捆绑调教在线高清 | 啾咪成人漫画免费 | 欧美一区二区三区免费高 | 男gay网站视频免费观看 | 2023最新伦理片| 无码AV精品一区二区三区 | 亚洲欧美天堂综合久久 | 91免费永久国产在线观看 | 亚洲一区二区三区不卡在线播放 | 我的男友是消防员在线观看 | 国产福利视频一区二区微拍视频 | 97精品国产自在现线免费观看 | 被强迫变性翘秘书 | 国产美女做爰免费视频网址 | 99久久精品国产免费 | 免费网址在线观看入口推荐 |