在nginx中添加對WebSockets的支持
Node中非常適合使用WebSockets技術——同一個進程可以同時為標準http請求和更新的WebSockets協議請求服務。但是,你到底應該如何在生產環境中部署使用WebSockets技術的程序呢?繼續閱讀下面的知識點來發現如何在web伺服器和雲提供程序中來做到這一點。WebSockets是一項很有趣的技術,但是它還是沒有引起託管服務提供商足夠的重視。Nodejitsu是第一個支持WebSockets的PaaS解決方案提供商,它使用的是node-http-proxy來做到這一點的。幾乎所有的解決方案都會引入代理。為了理解這一點,我們需要搞清楚WebSockets到底是如何工作的。
HTTP協議其實是一種無狀態的協議,也就是說,客戶端和服務端所有的交互都被建模成為請求和相應的模式,而這些請求和相應都保存了各自所需的狀態。這種級別的封裝就導致了現代客戶端/服務端web應用程序的設計。
這種協議的缺點就是,它不支持長時間的全雙工通信。現在有很多的基於TCP協議的全雙工通信的應用,如下面一些突出的典型應用:視頻流和會議,實時消息,遊戲。隨著web瀏覽器慢慢演變成支持更加豐富、更加高端的程序,我們自然也就想通過http協議來模擬實現這樣類型的程序。
WebSocket協議用於支持類似於TCP的長接。它通過客戶端和服務端使用標準的http握手來確定是否支持WebSockets。為了支持這樣的機制,有一個新的http頭信息叫Upgrade。因為http的客戶端和服務端經常沉浸在很多的非標準的頭信息當中,服務端即使不支持Upgrade也可以——只是客戶端將不得不回退到過時的http輪詢模式。
因為伺服器端不得不艱難地處理WebSocket連接,明智的做法就是有效地運行兩台伺服器。在一個Node程序中,我們經常會為標準的http請求用一個http.listen,以及另外一個「內部」的Websocket伺服器。
在示例中,通過使用代理將請求從nginx傳遞到Node進程,這樣就使得Node進程可以綁定到不同的埠而不只是80埠。通過使用相同的技巧,你可以使nginx支持WebSockets。下面展示了一個典型的nginx配置文件nginx.conf。
添加proxy_http_version 1.1、proxy_set_header Upgrade使得nginx過濾WebSockets請求到Node進程。上面的這個實例也會忽略WebSockets請求的緩存。


※創建一個基礎的http服務來查看運行中的進程
※對Node應用進行性能分析
※Node處理未捕獲的異常
※顯式和隱藏異常及錯誤參數
TAG:行家匯 |
※Facebook 添加最新AR繪圖功能,對標Snapchat和Instagram
※微軟用SharePoint Spaces為SharePoint添加混合現實支持
※Nokia X7吃上Android Pie 添加PureDisplay支持
※使用 singledispatch 在 Python 中追溯地添加方法
※Samsung One UI添加在Android Pie測試
※Android Q原生支持3D Touch?Ggoogle添加deep press功能
※蘋果將為 Mac 添加 Face ID,為 Magic Keyboard 添加 Touch Bar
※添加Blackmagic RAW,Blackmagic發布Pocket Cinema Camera 4K口袋視頻機全新固件
※傳新款iPhone將添加「World-Facing」晶元
※Oracle應用管理云:IMCS添加不同版本Weblogic entity的區別
※SyncThink為VR Tools套件添加動態視覺訓練
※ReportLab: 使用Python將圖表添加到PDF中
※Dialog公司為SmartBond?產品系列添加藍牙Mesh支持
※Oculus Unity插件通過開放API添加Windows MR支持
※Google Assistant可在Siri中添加快捷啟動短語
※Microsoft將跟蹤預防添加到最新的Edge Build
※Avalanche 小技巧-如何添加Virtual Router
※Surface Phone還沒死?Windows 10 RS5重新添加電話API
※Redis Zookeeper 添加本地服務
※SteamVR已為Oculus Rift S添加完整支持