2017-04-02 3 views
5

웹 소켓 (STOP over SockJs)과 백엔드에서 Spring을 사용하는 응용 프로그램이 있습니다. 응용 프로그램은 Tomcat의 localhost에서 잘 작동하지만 (웹 소켓) Heroku 또는 AWS Web Sockets에 배치하면 작동이 멈 춥니 다. Angular2WebSocket은 로컬 호스트에서 작동하지만 Heroku는 아님 (업데이트 됨)

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

에서 내 웹 소켓 구성이 나는 또한

{"disabled_transports":["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가 내 응용 프로그램에 봄 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> 

웹 소켓은 그래서 당신은 웹 브라우저의 콘솔에서 직접 확인할 수 있습니다. 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 logs를 확인하십시오. 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> 

을 추가 한 후. 가 그럼 난 (내가 Heroku가 통합 자식이) GitHub의에 내용을

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

과 헌신을 다음과 같이 PROCFILE을 추가, Heroku가 내에서 구축 트리거가 작동합니다.

+0

당신이 당신의 문제를 해결할뿐만 아니라 다음 코더에 대한 답을 남겼 기 때문에 Bump 1. –

+0

고마워요 루카스. Heroku에서 Websocket을 활용하려면 "webapp-runner"와 "tomcat-embed-websocket"이 필요합니까? webapp-runner를 8.5.27.0으로 업그레이드 중입니다. 그러나 우리가 Heroku가 배포 한 Tomcat에서 직접 App을 실행할 수 있다면 더 좋습니다. –

+0

앱을 스프링 부트로 옮기고 jar로 실행하면 webapp-runner와 tomcat-embed-websocket이 중복됩니다. – Lukasz