如何通过 Apache HTTP 服务器让 Vaadin Push 工作?

2024-02-26

我正在尝试让 Vaadin 7.1.5 Push 在 Apache Tomcat 7.0.42 + Apache HTTP 服务器(带有 mod_proxy_wstunnel 的 2.2.14)上工作。

当我直接访问 Tomcat 时(即,使用 WebSocket 进行推送),Vaadin 应用程序和推送工作正常。http://mydomain:8080/myapp)。当我尝试使用 Apache 模块 mod_proxy 和 mod_proxy_wstunnel 访问它时,问题就出现了。发生的情况是应用程序挂起,加载指示器变红,我在浏览器控制台的推送请求中收到此错误:

HTTP Status 501 - Websocket protocol not supported
type Status report
message Websocket protocol not supported
description The server does not support the functionality needed to fulfill this request.

Apache Tomcat/7.0.42

在需要Push之前,我使用mod_jk来转发请求http://mydomain/myapp to http://mydomain:8080/myapp。显然 mod_jk 不支持 WebSocket,所以我选择使用 ProxyPass 指令。这是我的 Apache 配置:

ProxyPass               /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/
ProxyPassReverse        /myapp/PUSH/ ws://localhost:8080/myapp/PUSH/

ProxyPass               /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPassReverse        /myapp/VAADIN/ http://localhost:8080/myapp/VAADIN/
ProxyPass               /myapp http://localhost:8080/myapp
ProxyPassReverse        /myapp http://localhost:8080/myapp

我怀疑 mod_proxy_wstunnel 是罪魁祸首,但显然当我代理时它工作正常http://echo.websocket.org http://echo.websocket.org。我发现 501 错误是由 Atmosphere 引发的,但我不知道如何调试它。如果我删除 ws 代理(因此推送使用 HTTP 而不是 WS),我会立即收到“会话已过期”错误。

有谁知道如何正确地将推送请求从 Apache HTTP 服务器代理到 Apache Tomcat?


我通过确保 ProxyPass (和 ProxyPassReverse)的路径与应用程序的上下文相同并在 tomcat 的 server.xml 配置中创建一个新的 NIO 连接器解决了这个问题:

<Connector port="8081" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           redirectPort="8443"
           proxyName="mydomain"
           proxyPort="80" />

我很确定有一种方法可以使用与应用程序上下文不同的路径,但这对我有用。

更新:请注意,此解决方案不适用于不支持 websocket 的浏览器(例如 IE

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 Apache HTTP 服务器让 Vaadin Push 工作? 的相关文章

随机推荐

  • Soundcloud (Oauth2) API 获取访问令牌失败

    我正在尝试根据 Soundcloud 登录对我的网站上的用户进行授权 它使用 Oauth 身份验证 用户必须单击我网站上的按钮 然后重定向到 Soundcloud 网站并登录 之后 用户被重定向回我的网站 我必须在其中获取 accessTo
  • 在自定义转场转换期间,视图的导航栏项目错位

    我有一个自定义 Segue 它使用 UIViewAnimationOptionTransitionFlipFromLeft 在视图之间进行转换 当新视图出现在屏幕上时 由于导航栏元素从左对齐状态跳转到适当的位置 会出现短暂但明显的 闪烁 以
  • Windows Phone 7 WebBrowser 控件吞下操作事件?

    如果我将 WebBrowser 控件放置在任何页面上 该页面将不再响应 WebBrowser 下的操作事件 页面的其他区域工作正常 通过覆盖很容易确认OnManipulationCompleted在页面中 然后将 WebBrowser 控件
  • 用C#解析并执行JS

    我有一个简单的爬虫 可以爬行和搜索页面 但现在我遇到了如何执行和解析该页面的 js 链接的问题 有谁知道如何解析和执行js页面吗 example some url 很容易用 webhtmltoolktit 解析 JAVASCRIPT run
  • OCR 解决方案可以检测数字手写体吗?

    有没有一种解决方案可以很好地书写数字 1 10 我尝试了超正方体 但我只得到垃圾 理想情况下是 OSS 但商业也可以 OpenCV 现在附带手写数字识别 OCR 示例 你可以参考一下 http code opencv org project
  • iPhone核心数据“自动轻量级迁移”

    我正在尝试更新一个实现核心数据存储的应用程序 我正在向其中一个实体添加属性 我将以下代码添加到我的委托类中 NSPersistentStoreCoordinator persistentStoreCoordinator if persist
  • 不用Gforth 就可以编译Gforth 吗?

    当我尝试编译 Gforth 0 7 0 时 出现以下错误 configure make compiling Undefined symbols main referenced from start in crt1 10 6 o ld sym
  • 使用 Monit 监控 Laravel 队列工作线程

    我目前正在考虑从 Supervisor 迁移到 Monit 以监视 Laravel 队列工作人员 主要原因是能够监视 CPU 内存和设置电子邮件警报 据主管说 我必须安装另一个软件包 因为我希望尽快监视其他内容 例如 Redis 或许还有
  • 我的 java 线程占用了多少内存?

    有没有办法找出我的java线程在VM中占用了多少内存 例如 使用堆栈跟踪转储或其他一些方法 Thanks Java 线程使用堆作为共享内存 各个线程都有自己的堆栈 您可以通过 Xss命令行选项 默认为 512KB 但所有其他内存 堆 不属于
  • Symfony 数据库教程代码错误

    我已经成功安装和设置了 Symfony 2 并且一直在遵循文档 我目前正在做http symfony com doc 2 0 book doctrine html http symfony com doc 2 0 book doctrine
  • 跟踪 C++ 内存分配

    我正在寻找一种方法来跟踪 C 程序中的内存分配 我是not对内存泄漏感兴趣 这似乎是大多数工具试图找到的 而是为应用程序创建内存使用情况配置文件 理想的输出是函数名称的大列表加上随时间变化的最大分配字节数 或者更好的是随时间变化的堆的图形表
  • ASP.NET Core 3.0 策略重定向

    我们有这部分代码来控制一些服务高级页面 对于没有高级会员资格的用户 拒绝 方法会重定向到升级页面 该代码在asp NET core 2上运行完美 但在asp NET core 3上失败 context Resource 不再是 Author
  • 多个特定于目标的变量值

    按照文档管理特定于目标的变量值 https www gnu org software make manual html node Target 002dspecific html prog CFLAGS g prog prog o foo
  • 如何在 Flutter 应用中播放 .mp3 文件?

    我写了一个Dart从服务器检索 mp3 文件并播放它们的 Web 应用程序 我正在尝试使用 Flutter 编写移动版本 我知道dart web audio是 Web 应用程序的主要选项 但 Flutter 在我的 SDK 中找不到它 我知
  • 使用 jQuery 在“Enter”上提交表单?

    我有一个 bog 标准登录表单 使用 HTML jQuery 的 AIR 项目上的一个电子邮件文本字段 一个密码字段和一个提交按钮 当我在表单上按 Enter 时 整个表单的内容消失 但表单未提交 有谁知道这是否是 Webkit 问题 Ad
  • 带有结构体参数的 C 函数原型

    我想为一个函数编写一个函数原型 其参数是指向结构体的指针 int mult struct Numbers n 但是 结构 Numbers 定义为 struct Numbers int a int b int c 尚未定义 我应该如何为 mu
  • 什么负责生成默认构造函数?

    如果每个班级都有一个默认构造函数那么谁生成它 编译器还是 JVM 简而言之 编译器将在必要时生成默认构造函数 这绝对是由 Java 到字节码编译器完成的 您可以通过检查适当的 class文件使用javap 您应该看到已插入的构造函数 不过我
  • 证书错误:主机名不匹配

    我正在使用代理 位于公司防火墙后面 来登录 https 域 SSL 握手似乎进展不顺利 CertificateError hostname ats finra org 443 doesn t match ats finra org 我正在使
  • 如何处理 Agda 不确定是否在 with 语句中生成构造函数的情况?

    我有以下代码 open import Data Nat open import Agda Builtin Char open import Data Maybe digit Maybe digit n with compare n prim
  • 如何通过 Apache HTTP 服务器让 Vaadin Push 工作?

    我正在尝试让 Vaadin 7 1 5 Push 在 Apache Tomcat 7 0 42 Apache HTTP 服务器 带有 mod proxy wstunnel 的 2 2 14 上工作 当我直接访问 Tomcat 时 即 使用