angular – Websocket在localhost上工作但不是Heroku

前端之家收集整理的这篇文章主要介绍了angular – Websocket在localhost上工作但不是Heroku前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用websockets的应用程序(STOMP over SockJs),后端有 Spring.应用程序在Tomcat上的localhost上工作正常(websockets)但是当我部署到Heroku或AWS Web Sockets停止工作时.
我在Angular2中的websocket配置
  1. let sockjs = new SockJS('/rest/add?jwt=' + this.authService.getToken(),{"devel":true,"debug":true},{"transports":["websocket"]});

我也尝试过

  1. {"disabled_transports":["websocket"]}

但两者都失败了.
web.xml中

  1. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  4. http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  5. version="3.1">
  6.  
  7. <context-param>
  8. <param-name>spring.profiles.default</param-name>
  9. <param-value>default</param-value>
  10. </context-param>
  11.  
  12. <servlet>
  13. <servlet-name>ws</servlet-name>
  14. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  15. <init-param>
  16. <param-name>contextConfigLocation</param-name>
  17. <param-value>classpath:/spring/ws-context.xml</param-value>
  18. </init-param>
  19. <load-on-startup>1</load-on-startup>
  20. <async-supported>true</async-supported>
  21. </servlet>
  22. <servlet-mapping>
  23. <servlet-name>ws</servlet-name>
  24. <url-pattern>/rest/*</url-pattern>
  25. </servlet-mapping>
  26.  
  27. <filter>
  28. <filter-name>springSecurityFilterChain</filter-name>
  29. <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  30. <async-supported>true</async-supported>
  31. </filter>
  32. <filter-mapping>
  33. <filter-name>springSecurityFilterChain</filter-name>
  34. <url-pattern>/rest/*</url-pattern>
  35.  
  36. </filter-mapping>
  37. </web-app>

春天的websocket

  1. <websocket:message-broker
  2. application-destination-prefix="/app">
  3. <websocket:stomp-endpoint path="/add">
  4. <websocket:sockjs/>
  5. </websocket:stomp-endpoint>
  6. <websocket:simple-broker prefix="/topic,/queue" />
  7. </websocket:message-broker>

我在Heroku上的应用程序的URL,因此您可以在Web浏览器的控制台中自行检查.
Link
请看更新的日志,这件事让我担心没有TransportHandler

  1. 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上本地部署,之后我看到一个奇怪的错误.我测试了几个库,最后添加
  1. <dependency>
  2. <groupId>org.apache.tomcat.embed</groupId>
  3. <artifactId>tomcat-embed-websocket</artifactId>
  4. <version>8.5.11</version>
  5. </dependency>

  1. <build>
  2. ...
  3. <plugins>
  4. ...
  5. <plugin>
  6. <groupId>org.apache.maven.plugins</groupId>
  7. <artifactId>maven-dependency-plugin</artifactId>
  8. <version>2.3</version>
  9. <executions>
  10. <execution>
  11. <phase>package</phase>
  12. <goals><goal>copy</goal></goals>
  13. <configuration>
  14. <artifactItems>
  15. <artifactItem>
  16. <groupId>com.github.jsimone</groupId>
  17. <artifactId>webapp-runner</artifactId>
  18. <version>8.5.11.3</version>
  19. <destFileName>webapp-runner.jar</destFileName>
  20. </artifactItem>
  21. </artifactItems>
  22. </configuration>
  23. </execution>
  24. </executions>
  25. </plugin>
  26. </plugins>

我让它在当地工作.
然后我添加了以下内容的PROCFILE

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

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

猜你在找的Angularjs相关文章