本文使用 http proxy 方式 實現 apache 支援 websocket 請求(jk 使用的 ajp 協議不能支援websocket)
通過 apache 訪問 後端 tomcat上的 websocket 服務,需要使用 mod_proxy.so 和 mod_proxy_wstunnel.so兩個庫檔案(在apache2.4 安裝目錄下已存在,放開httpd.conf檔案中的注釋即可使用),如果應用中需要通過http協議訪問某些頁面(如index頁面)則需要新增使用 mod_proxy_http.so,如下:
loadmodule proxy_module modules/mod_proxy.soloadmodule proxy_http_module modules/mod_proxy_http.so (可選)
loadmodule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
最後面新增:
proxypass /web/websocket/ ws://tommcatip:8080/web/websocket/
proxypass / (可選)
我的apache埠使用的是 80,所以訪問 就出現了 index.html首頁(此次訪問不是websocket,所以需要開啟mod_proxy_http.so,如果不需要可以關閉載入mod_proxy_http.so) (可選)
我的應用中配置的 websocket服務都在 web/websocket/ 下面,所以配置了對映,對於其它所有對映如 「/」 需要配置到 web/websocket/ 對映的後面,否則 web/websocket/ 的對映會被當做http協議處理。
注意: websocket 負載均衡 沒有 親和/非親和 概念!!!
另外一種實現方式:
前寫的即時通訊部分上傳到伺服器上之後,發現 websocket 連線不上了。
媽蛋。mod_python 在我最開始配置 apache 支援 php 和 pyhton 的時候就發現好像不太好用,所以就沒有用。
這次簡單地嘗試了一下還是有問題,所以就算了。
可能因為我是通過 apache **,將網域名稱解析到指定埠來實現 tornado 應用的上線,而 websocket 在握手的時候請求直接傳送到 apache。apache **的時候沒法將 websocket 握手請求傳遞給 tornado 應用,結果就是握手失敗
解決方案:
將 html 檔案裡的 ws 伺服器位址修改為伺服器 ip 位址,越過 apache **的部分,直接跟 tornado 應用握手。
就是這樣:
《***.html》ws = new websocket("ws:")ws = new websocket("ws:")
以上。
wireshark如何抓取WebSocket資料報
websocket目前在web端使用廣泛,可以使用websocket來傳輸資料,解決了web端無法跟伺服器維持高效的長鏈結的問題。什麼是websocket呢?websocket是一種瀏覽器與伺服器進行全雙工通訊的應用層協議。它基於 tcp 傳輸協議,並復用 http 的握手通道,可以在瀏覽器裡使用,...
簡單嘗試 express 使用 websocket
node 使用 express 框架 先安裝 express 和 express ws yarn add express express ws服務端server.js var express require express var expressws require express ws expre...
Apache配置技巧
apache配置技巧 1 如何設 置請求等待時間 在httpd.conf裡面設定 timeout n 其中n為整數,單位是秒。設定這個timeout適用於三種情況 2 如何接收乙個get請求的總時間 接收乙個post和put請求的tcp包之間的時間 tcp包傳輸中的響應 ack 時間間隔 3 如何使...