【问题标题】:JHipster Atmosphere websocket does not connectJHipster Atmosphere websocket 不连接
【发布时间】:2014-02-24 21:33:11
【问题描述】:

使用从“yo jhipster”生成并以“mvn spring-boot:run”和“grunt server”开始的新构建的应用程序,我能够加载应用程序并执行登录、查看指标、查看会话、设置等操作、日志和审计。但是,每当我查看“用户跟踪器”页面时,我什么都看不到?

我相信本节应该演示 Atmosphere websocket / AngularJS 集成?查看浏览器控制台日志,我看到以下内容:

Websocket failed. Downgrading to Comet and resending atmosphere.js:2866
GET http://0.0.0.0:9000/websocket/activity?X-Atmosphere-tracking-id=0&X-Atmosph…true&X-Cache-Date=0application%2Fjson&X-atmo-protocol=true&_=1393276976964 404 (Not Found)   

似乎尝试了 websocket 连接但最终超时并且后备长轮询不起作用?我正在使用最新的 Chrome(也在最新版本的 Firefox 和 Safari 上尝试过)。

我错过了一些简单的东西吗?

-- 更新 1--

将其作为 WAR 部署到 Tomcat 7.0.50 会在 User Tracker 页面中显示从 Atmosphere 返回的数据,但它会不断循环尝试获取 WebSocket 连接(HTTP 状态代码 101:切换协议),因此用户数据会定期出现和消失.我在 Chrome 中看到这样的错误:

No suspended connection available. Make sure atmosphere.subscribe has been called and request.onOpen invoked before invoking this method 

Tomcat 日志显示如下:

[WARN] org.atmosphere.cpr.DefaultAnnotationProcessor - Unable to detect annotations. Application may fail to deploy.

-- 更新 2--

将其作为 WAR 部署到 Jetty 8.1.14.v20131031(Jetty 9.1.1.v20140108 引发错误)并使用 Chrome 32.0.1700.107 对其进行测试似乎适用于长轮询的后备传输。然而,与 WebSockets 的初始连接失败了,因为 Atmosphere 出于某种原因认为 servlet 容器是 Tomcat?在服务器日志中,它会引发以下问题:

java.lang.ClassCastException: org.eclipse.jetty.server.Request cannot be cast to org.apache.catalina.connector.RequestFacade
    at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:141)
    at org.atmosphere.container.Tomcat7Servlet30SupportWithWebSocket.service(Tomcat7Servlet30SupportWithWebSocket.java:62)

再次感谢您的所有帮助 - 肯定会取得进展 :)

-- 更新 3--

总结一下:

  1. 目前“mvn spring-boot:run”和“grunt server”不能一起用于 Websocket 或长轮询
  2. 如果您将 JHipster WAR(mvn 包)部署到 Jetty 8.1.14.v20131031,那么它可以工作,但您需要从您的 JHipster pom.xml 中删除以下依赖项,否则 Atmosphere 将不提供 WebSocket 支持:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    
  3. 啊。误报——我使用流而不是 websockets 运行它,所以 websockets 仍然有来自 update2 的错误

【问题讨论】:

    标签: angularjs websocket atmosphere jhipster


    【解决方案1】:

    不,你不会错过任何东西 :-)

    如果您直接使用 Java 服务器,它应该可以工作:您需要使用另一个浏览器(或另一个选项卡)连接到应用程序,然后您会看到工作正常。

    但是,对于“grunt server”,有一个错误:Grunt 代理只是不支持 Websocket,所以它不起作用......有一件奇怪的事情,因此,回退传输不起作用.

    我将其作为错误填充。

    -- 更新 1--

    关于您的更新,看起来还有另一个 Atmosphere 错误: http://atmosphere-framework.2306103.n4.nabble.com/Log-warning-that-Atmosphere-is-unable-to-detect-annotations-td4658159.html

    Atmopshere 似乎在 WAR 中找不到它的注解,你可以在开发模式下尝试同样的事情(“mvn spring-boot:run”)吗?这意味着这是 Tomcat 中的 WAR 问题

    【讨论】:

    • 感谢您的快速响应!我尝试构建一个 WAR(开发模式)并将其部署到 Tomcat 7.0.50,它在 User Tracker 页面中显示数据,但它在 Chrome 的控制台中引发了一堆错误(我用错误更新了上面的帖子)所以连接没有'似乎不太可靠。
    • 我在上面添加了 -- 更新 2--。 Jetty8 似乎适用于长轮询的后备传输,但初始 WebSocket 连接失败,因为 Atmosphere 认为 servlet 容器是 Tomcat 出于某种原因
    • 我也试过“mvn spring-boot:run”,它似乎部署得很好,但我不确定如何访问 webapp?我在 localhost:8080 看不到任何东西。以前我必须运行“grunt server”并导航到 localhost:9000 才能看到任何内容,但后来我又回到了原点,没有 websocket 或长轮询支持。
    • 好的,我解决了上面的 --Update2-- 以便 JHipster + Websockets 在 Jetty 8.1.14.v20131031 上工作。我在groups.google.com/forum/#!topic/atmosphere-framework/… 关注了关于 Atmosphere 的讨论,并从 JHipster Maven 依赖项列表中删除了 spring-boot-starter-tomcat b/c Atmosphere 正在读取 Tomcat 库,因此它错误地认为 Jetty 是 Tomcat
    • @MinhNguyen 您是否能够在tomcat 上使用jhipster 获得具有气氛的websockets?如果是这样,你能否分享一个示例代码,如果你能指导我一些你所做的配置,那将会很有帮助。
    猜你喜欢
    • 2020-03-12
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多