Websocket 在 localhost 上工作但不能在 Heroku 上工作

2023-11-25

我有一个使用 websockets(STOMP over SockJs)的应用程序,后端使用 Spring。应用程序在 Tomcat 上的本地主机上运行良好(websockets),但是当我部署到 Heroku 或 AWS Web Sockets 时停止工作。 我在 Angular2 中的 websocket 配置

        let sockjs = new SockJS('/rest/add?jwt=' + this.authService.getToken(), {"devel":true,"debug":true}, {"transports":["websocket"]});

我也尝试过

{"disabled_transports":["websocket"]}

但两者都失败了。 网络.xml

 <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
     http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

<context-param>
    <param-name>spring.profiles.default</param-name>
    <param-value>default</param-value>
</context-param>

<servlet>
    <servlet-name>ws</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:/spring/ws-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>ws</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/rest/*</url-pattern>

</filter-mapping>
</web-app>

春天的网络套接字

    <websocket:message-broker
    application-destination-prefix="/app">
    <websocket:stomp-endpoint path="/add">
        <websocket:sockjs/>
    </websocket:stomp-endpoint>
    <websocket:simple-broker prefix="/topic, /queue" />
</websocket:message-broker>

我在 Heroku 上的应用程序的 URL,以便您可以在 Web 浏览器的控制台中自行检查。Link请查看更新的日志,这部分让我担心无传输处理程序

CJyb2xlcyI6IkNVU1RPTUVSIn0.wFqNOduN-lD1-9GIRnG1X1aLJZTxtz9c6vmO7jmPPiE2017-04-06T16:23:32.439917+00:00 app[web.1]: 2017-04-06 16:2332 WARN  DefaultSockJsService:239 - No TransportHandler for http://myapp-ws.herokuapp.com/rest/add/097/eyocvxic/websocket?jwt=eyJhbGciOiJI

好的,最后我成功了。事实证明,heroku 上的 Tomcat 没有标准的库集。 首先我在 webapp-runner 上本地部署https://devcenter.heroku.com/articles/java-webapp-runner之后我看到了一个奇怪的错误。我测试了几个库,最后添加后

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket</artifactId>
    <version>8.5.11</version>
</dependency>

and

<build>
...
<plugins>
    ...
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.3</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals><goal>copy</goal></goals>
                <configuration>
                    <artifactItems>
                        <artifactItem>
                            <groupId>com.github.jsimone</groupId>
                            <artifactId>webapp-runner</artifactId>
                            <version>8.5.11.3</version>
                            <destFileName>webapp-runner.jar</destFileName>
                        </artifactItem>
                    </artifactItems>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

我让它在本地工作。 然后我添加了 PROCFILE 并包含以下内容

web:    java $JAVA_OPTS -jar myapp-ws/target/dependency/webapp-runner.jar --port $PORT myapp-ws/target/*.war

并致力于 GITHUB(我已将 git 与 Heroku 集成),从 Heroku 内部触发构建并且它有效。

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

Websocket 在 localhost 上工作但不能在 Heroku 上工作 的相关文章

随机推荐

  • 为什么流输出中的 < 而不是 << 仍然可以编译?

    今天 我在程序中犯了一个小错字 并且想知道为什么我没有得到任何输出 尽管程序编译得很好 基本上它可以简化为 include
  • 玩!框架:在单独的 JavaScript 文件中使用 URL 的最佳实践?

    我目前正在重新组织一个Play JS较多的项目 HTML 模板文件中的代码 该代码应移至外部 JS 文件具有更好的可读性和更快的页面加载时间 然而 当我刚刚在 public 文件夹中创建一个 JS 文件时 所有 Controller met
  • 如何在 Powershell 中等待并终止超时进程

    在 Windows 7 桌面中使用 Powershell 2 0 我想创建一个进程来运行 ant 命令 然后等待该进程在几分钟内完成 如果超时并且进程仍在运行 那么我想杀死它 我写了一些代码如下 p Start Process cmd ex
  • 如何查看“git stash -u”的未跟踪文件

    在 git 中存储内容非常有用 当存储未跟踪的文件并像这样浏览你的存储时 echo test gt foo git stash u foo is stashed git stash show p stash 0 未跟踪的文件不会显示 我们怎
  • 当前位置没有可用的来源

    我收到这个错误 Locating source for C Users cem Documents Visual Studio 2008 Projects CS Web Controls WebCropImage CropImage cs
  • 如何在 AngularJs 中设置全局 http 超时

    我知道我每次都可以设置超时 http get path to service timeout 5000 但我想设置一个全局超时以保持我的代码干燥 这可以通过前沿的 angular js 实现 使用 git master 4ae46814ff
  • 函数式编程:什么是“不正确列表”?

    有人可以解释一下什么是 不正确的列表 吗 我认为 Vijay 的答案是迄今为止最好的答案 我只是打算对其进行 Erlangify Erlang 中的对 cons 单元 写为 Head Tail nil 写成 对于头部和尾部是什么没有限制 但
  • 寻找 Properties.Settings.Default 的快捷方式

    我定义的选项越多 修改它们时需要输入的内容就越多 所以我正在寻找 Properties Settings Default varX 的较短版本 I tried Properties Settings settings Properties
  • Swift 相当于 `[NSDictionary initWithObjects: forKeys:]`

    是否有 Swift 原生的等价物Dictionary to NSDictionary initWithObjects forKeys 假设我有两个带有键和值的数组 并且想将它们放入字典中 在 Objective C 中我会这样做 NSArr
  • 在 POM 中使用 --enable-preview 执行 Maven 插件

    我有一个自定义 Maven 插件 它利用 JDK 12 预览功能 我编译插件设置 enable preview作为编译器参数 即
  • 使服务成为前台服务

    我有一个服务 我想将其设为前台服务 我的服务不需要与用户沟通 我在这个论坛上看到的最简单的例子就是将此代码放入服务中 Notification notification new Notification startForeground 54
  • 在 Asp Core 中将 IFormFile 转换为图像

    如果文件是图像 我需要调整文件上传的大小 我编写了用于调整大小的扩展 public static Image ResizeImage this Image image int width int height var res new Bit
  • python:生成整数分区

    我需要生成所有分区给定整数 我发现了 Jerome Kelleher 提出的算法 据说它是最有效的算法 def accelAsc n a 0 for i in range n 1 k 1 a 0 0 y n 1 while k 0 x a
  • Java 可序列化对象到字节数组

    假设我有一个可序列化的类AppMessage 我想将其传输为byte 通过套接字到另一台机器 在另一台机器上根据收到的字节进行重建 我怎样才能做到这一点 准备要发送的字节数组 ByteArrayOutputStream bos new By
  • 查询的结果不能被枚举多次

    我正在使用实体框架 ef 并收到以下错误 查询的结果不能被枚举多次 我有一个包含 ef 数据上下文的存储库类 然后我有一个控制器类 不要与 MVC 控制器混淆 其中包含存储库的实例 到目前为止一切顺利 我在控制器上有一个搜索方法 它应该返回
  • 如何在 PHP 中使用 BLENC?

    我有一个 testcode php 文件需要编码 我创建了文件encode php来加密和测试该文件
  • #pragma包效果

    我想知道是否有人可以向我解释什么 pragma pack预处理器语句确实如此 更重要的是 为什么人们想要使用它 我查看了MSDN 页面 这提供了一些见解 但我希望听到更多有经验的人的意见 我以前在代码中见过它 但我似乎找不到在哪里了 pra
  • Symfony2:在生产中访问与开发相同的路径

    我正在使用 Symfony2 开发一个小应用程序 我可以在我的开发环境中毫无问题地访问所有路由 http symfony app dev php cp symfony 在我的主机文件中解析为本地主机 然而 当我尝试在生产环境中访问它时 我只
  • Angular 发送带有 get(和其他)请求的令牌

    由于某种原因 互联网上缺乏关于如何在 Angular 4 中执行此操作的示例 Angular 4 使用 TypeScript 它不允许您跳过包含选项属性 如它转译成的 JavaScript 那样 我正在尝试访问我团队的 RESTful AP
  • Websocket 在 localhost 上工作但不能在 Heroku 上工作

    我有一个使用 websockets STOMP over SockJs 的应用程序 后端使用 Spring 应用程序在 Tomcat 上的本地主机上运行良好 websockets 但是当我部署到 Heroku 或 AWS Web Socke