在本地主机上工作但不是Heroku的Websocket(更新)

在本地主机上工作但不是Heroku的Websocket(更新)

问题描述:

我有一个应用程序使用websockets(SockJs上的STOMP),并在后端使用Spring。应用程序在Tomcat上的localhost上正常工作(websockets),但是当我部署到Heroku或AWS Web Sockets停止工作时。 在Angular2在本地主机上工作但不是Heroku的Websocket(更新)

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

我WebSocket的配置我也试图与

{"disabled_transports":["websocket"]} 

但都失败了。 的web.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春季

<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> 

URL我在Heroku上的应用程序,所以你可以在你的网页浏览器的控制台由自己去查。 Link 请参阅更新日志,这片让我担心没有TransportHandler

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 
+1

您的日志无用,查看vegur日志 - mayge vegur配置不正确并丢弃websocket连接。并且不要禁用websocket,您需要启用websocket。 – user1516873

+0

我可以在日志中看到H27错误https://devcenter.heroku.com/changelog-items/662,但是什么都不需要在Heroku上进行更改(原因可能是我有一个免费账户而不是付费账户)。我还创建了一个Heroku支持团队的门票来看看这个。 – Lukasz

+0

我将帐户升级到付费,但它仍然不起作用 – Lukasz

好,所以最后我做了它的工作。原来,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> 

<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的建立和它的作品。

+0

Bump 1因为你不仅解决了你的问题,而且在下一个编码器中留下了答案。 –

+0

谢谢卢卡斯。现在我们还需要“webapp-runner”和“tomcat-embed-websocket”来利用Heroku上的Websockets吗?我正在将webapp-runner升级到8.5.27.0。不过,我认为如果我们可以直接在Heroku部署的Tomcat上运行App,会更好。 –

+0

将应用程序移动到Spring Boot并作为jar运行时,webapp-runner和tomcat-embed-websocket都是多余的 – Lukasz