簡體   English   中英

在 Microsoft Azure Web-App-Service(非 VM)上使用帶有 Java Tomcat 的 Websockets

[英]using Websockets with Java Tomcat on Microsoft Azure Web-App-Service (not VM)

有人設法使用 Tomcat 在 Microsoft Azure WebApp-Service 上運行 Websockets 嗎? 我嘗試運行 Tomcat 7 chat-application-example ,但無法連接到 Websocket 端點。 我總是收到這條消息:

WebSocket 連接到“ws://mywebapp.azurewebsites.net/websocket-example/websocket/chat”失敗:WebSocket 握手期間出錯:意外響應代碼:404

在本地運行它時一切正常。 本地和Azure上我使用Tomcat 7與Java 7(32位)一起並啟用在Azure的應用程序,設置WebSocket的選項,如所描述這里

我還需要做什么,才能讓 Websockets 使用 Java WebApp 在 Azure 上工作?

Azure 上的 Websockets 是否僅適用於 Node.js 和 ASP.NET?

更新:

Websockets 正在與 Tomcat 一起在 Azure 上工作! 您必須確保在 Azure 門戶中啟用了 Websocket,並且您選擇了正確的 Java、Tomcat 和 Plattform 版本,您的 .war 文件已針對這些版本進行編譯。 除此之外,您必須確保按照此處所述正確加載 ServerEndpoints !

我在為運行 tomcat 9 網絡服務器設置的 azure web 應用程序配置 websocket 連接時也遇到了問題。 我在這里添加這個答案,因為這個頁面是我在各種搜索中得到的第一個谷歌結果。

我的問題是,沒有像 websockets 這樣的異步請求可以工作,網絡服務器會告訴我我需要為所有過濾器和 servlet 啟用異步支持。 (對於 websockets,在重新啟動后第一次調用網站時,我只能在瀏覽器開發工具的網絡選項卡上看到此消息)

我發現需要在您的應用程序 web.xml 中為異步支持配置以下過濾器。 EasyAuth 可能僅在您為 Web 服務配置身份驗證時才需要。

<filter>
<filter-name>EasyAuthFilter</filter-name>
<filter-class>com.microsoft.azure.appservice.EasyAuthFilter</filter-class>
<async-supported>true</async-supported>
</filter>

<filter>
<filter-name>AppServiceFilter</filter-name>
<filter-class>com.microsoft.azure.appservice.filters.AppServiceFilter</filter-class>
<async-supported>true</async-supported>
</filter>

這些過濾器並不明顯,因為它們是由 Microsoft 在位於 tomcat 服務器安裝目錄的 web.xml 中添加的,但缺少<async-supported>標記。 您可以使用 kudu ssh 檢查安裝文件夾中的 web.xml 並導航到 /usr/local/tomcat/config。 由於您無法更改安裝目錄中的文件(當應用程序重新啟動時它將被覆蓋),您需要在應用程序 web.xml 中為這些過濾器配置異步支持。

請嘗試參考web.config中的 Tomcat 應用程序配置示例文檔部分,並在 Tomcat 啟動選項中添加-Dorg.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS=true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM