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

时间:2016-03-10 13:37:20

标签: java azure tomcat websocket azure-web-sites

有人设法使用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选项,如here所述。

我还需要做些什么,让Websockets在Java WebApp上运行?

Azure上的Websockets是否仅与Node.js和ASP.NET一起使用?

更新

Websockets正在使用Tomcat处理Azure!您必须确保在Azure门户中启用了Websockets,并且您选择了已编译.war文件的正确Java,Tomcat和Plattform版本。 除此之外,您必须按照here所述正确加载ServerEndpoints!

2 个答案:

答案 0 :(得分:2)

我还为运行tomcat 9 Web服务器设置的azure Web应用程序配置Websocket连接时遇到问题。我在此处添加此答案,因为此页面是我通过各种搜索获得的第一个Google搜索结果。

我的问题是,没有像websockets这样的异步请求会起作用,并且Web服务器会告诉我我需要为所有过滤器和servlet启用异步支持。 (对于websocket,重新启动后首次向网站发出呼叫时,我只能在浏览器开发工具的“网络”标签上看到此消息)

我发现需要为应用程序web.xml中的异步支持配置以下过滤器。仅当您为Web服务配置身份验证时,才需要EasyAuth。

<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中为这些过滤器配置异步支持。

答案 1 :(得分:0)

请尝试在web.config中引用Tomcat的doc部分Application Configuration Examples,并在Tomcat启动选项中添加-Dorg.apache.tomcat.websocket.DISABLE_BUILTIN_EXTENSIONS=true