一.當時使用場景
使用者訪問**會有一條access log ,這條log會有使用者的ip,為了了解每天**訪問者的地域分布情況,
需要拿到這些ip去查詢ip所屬地域;這樣一下子就會有很多ip要到固定的服務(比如:上去查詢
二.分析難點和效能瓶頸
最簡單和一般的實現方式就是拿到這些ip迴圈的請求查詢;事實上我的第一版也是這麼幹的。
但是跑了一段時間後發現不少超時的,看/var/log/message 發現報了不少 localhost kernel: tcp: time wait bucket table overflow
這種錯誤。在網上查詢了一下發現是由於伺服器端口使用太多太快導致不夠用;查到這裡很多人也許會選擇修改linux核心引數擴大埠
開啟埠復用,加快**等等。這樣做還是有一定的效果的但是沒有根本上解決問題。
1. http 連線本身是短連線、無狀態的,並且在tcp連線之上的乙個協議;
3. 預設下傳送乙個http請求要有這幾個過程:網域名稱解析目標機器埠、tcp連線(本機乙個埠和目標埠)、傳送http請求、收到http響應、關閉(tcp)連線。
這樣每個請求都需要這樣來一遍,其實http 1.0 就差不多這樣的;但在http 1.1 做了一些優化,這些優化不具體的介紹,只說這次使用connnection這個報頭
字段,預設下的值close還有乙個keep-alive。
keep-alive 的作用就是復用tcp連線;在乙個tcp連線上多次http請求響應,這樣系統就不用耗費大量的資源放在建立和釋放tcp連線上,還可以加快的http整體耗時。
另外有個坑要注意,一般如果你請求時帶著keep-alive的話伺服器一般會跟你保持連線也返回keep-alive,但是為了安全的原因,伺服器可能會在一段時間(300秒或者100個http)內返回close,
一般伺服器都有這個配置,感興趣可以自己查閱。所以你得關注這個頭,如果伺服器關閉了連線你還得重新建立乙個。
HTTP長連線和WebSocket長連線的區別
要理解http長連線和websocket長連線的區別,首先要理解一下什麼是http的長連線和短連線。首先需要消除乙個誤解 http協議是基於請求 響應模式的,因此客戶端請求後只要服務端給了響應,本次http請求就結束了,沒有長連線這一說。那麼自然也就沒有短連線這一說了。所謂的http分為長連線和短連...
http 關於長連線和分塊傳輸
動態生成的內容比如壓縮流,動態網頁 js hide,事先並不知道content length,為了提高響應速度,希望一邊生成一邊傳輸,通常以關閉連線表明內容傳完完畢。但是希望連線keep alive呢?解決辦法是chunked transfer encoding,rfc規範要求如果是http 1.1...
http 長連線 短連線
http短連線 非持久連線 是指,客戶端和服務端進行一次http請求 響應之後,就關閉連線。所以,下一次的http請求 響應操作就需要重新建立連線。http長連線 持久連線 是指,客戶端和服務端建立一次連線之後,可以在這條連線上進行多次請求 響應操作。持久連線可以設定過期時間,也可以不設定。http...