Implementamos nuestra aplicación web Spring MVC en Windows Server 2012 . Nuestra aplicación web utiliza Spring Websockets para actualizaciones con stomp.js y sock.js.
Nuestra configuración websocket :
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/topic"); config.setApplicationDestinationPrefixes("/calcApp"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/add").setAllowedOrigins("*").withSockJS(); } }Websocket funciona en localhost y los registros son los siguientes:
Opening Web Socket... Web Socket Opened... >>> CONNECT accept-version:1.1,1.0 heart-beat:10000,10000 <<< CONNECTED version:1.1 heart-beat:0,0 user-name:admin connected to server undefined >>> SUBSCRIBE id:sub-0 destination:/topic/resident ...Extrañamente, no funciona cuando ingreso una IP externa , en la misma máquina y navegador :
Opening Web Socket... WebSocket connection to 'ws://192.168.5.50:8080/autopark/add/629/i148hb1c/websocket' failed: WebSocket is closed before the connection is established. Whoops! Lost connection to undefinedPensamos que para el acceso externo , hay algún firewall y lo deshabilitamos por completo:
Pero no resolvió nuestro problema.
¿Cómo podemos solucionar este problema?
No estoy muy seguro y no soy un experto en primavera.
pero parece que necesita llamar al servidor por un nombre de dominio sobre su dirección IP, lo cual es lógico.
Dado que una ip se usaría para más de un dominio, parece que el contexto necesita saber a qué contexto se debe llamar (incluso si hay uno) en el contexto de primavera.
en otras palabras, llamar al contexto por ip confundiría el contexto de primavera para seleccionar/invocar qué contexto/dominio, por lo que rechaza la conexión.
Inténtalo, combina 192.168.5.50 con un nombre de dominio, luego intenta llamar a la ruta usando el dominio (no ip). Espero que funcione de esta manera.
El primer paso para depurar esto sería verificar que su servidor de aplicaciones realmente esté escuchando en la interfaz externa.
Puede verificar a qué IP está vinculado su contenedor buscando entradas 8080 en la salida de netstat.
netstat -a -n -o | find "8080"
El siguiente paso debe ser verificar que una computadora externa pueda "ver" el puerto en la IP externa. Hay varias formas de hacer esto, pero bastará con usar el comando telnet.
telnet 192.168.5.50 8080Si llegamos a este punto, es probable que haya un problema con la configuración de la aplicación en sí.