Apache 配置 WebSocket 協議

2021-09-08 22:40:32 字數 1527 閱讀 8907

本文使用 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.so  

loadmodule 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 如何使...