2017-04-02 140 views
5

我有一個應用程序使用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

回答

7

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

相關問題