Respuestas de la atmósfera, las transmisiones no llaman a javascript en el controlador de mensajes

Estoy trabajando con la atmósfera tratando de obtener la implementación básica simple usando la atmósfera 2.0.3 tomcat 7.0.42 ejecutándose localmente en mi entorno eclipse (también conectándome desde una máquina externa para ver el tráfico con wireshark). El problema que estoy experimentando es independientemente del transporte que use, websocket, sse, polling, long-polling, la respuesta de difusión nunca llega al cliente y la respuesta. El controlador OnMessage nunca se invoca. No recibo excepciones durante el tiempo de ejecución, y lo he intentado con firefox / chrome / e IE. También he utilizado wireshark y veo un paquete después de la publicación de un mensaje de chat que contiene mi respuesta de mensaje: “HTTP – Continuación o tráfico no HTTP” y en los datos del paquete puedo ver el mensaje saliente al cliente, por lo que Aparece el lado del servidor está funcionando correctamente. Se establece la conexión inicial con el servidor y se invoca el controlador js onOpen como se esperaba.

El trabajo que estoy haciendo se basa en gran medida en la aplicación de chat de muestra de la atmósfera. Si alguien tiene alguna sugerencia, la agradecería. También podría valer la pena mencionar, que agregué en el manejador de chat real, js, y la página html de la muestra de la atmósfera y tampoco se comporta y el manejador onMessage js no se invoca en eso tampoco, así que creo que es un problema de configuración.

web.xml

 AtmosphereServlet AtmosphereServlet org.atmosphere.cpr.AtmosphereServlet  oauseWebSocket true   org.atmosphere.useNative true  0 true   AtmosphereServlet /chat/*   AtmosphereServlet /chatSample/*  

POM.xml

  javax.activation activation 1.1.1   org.atmosphere atmosphere-compat-tomcat 1.0.15   org.atmosphere atmosphere-compat-tomcat7 1.0.15   org.atmosphere atmosphere-runtime 2.0.3   org.codehaus.jackson jackson-core-asl 1.9.3   org.codehaus.jackson jackson-mapper-asl 1.9.3   javax.servlet servlet-api 2.5  

Código del lado del servidor:

 @AtmosphereHandlerService(path="/chat", broadcasterCache = UUIDBroadcasterCache.class, interceptors = { AtmosphereResourceLifecycleInterceptor.class, BroadcastOnPostAtmosphereInterceptor.class, HeartbeatInterceptor.class }) public class ChatController extends OnMessage { private final ObjectMapper mapper = new ObjectMapper(); @Override public void onMessage(AtmosphereResponse response, String message) throws IOException { response.write(mapper.writeValueAsString(mapper.readValue(message, Data.class))); } } 

Javascript del lado del cliente (se ha probado con polling / long-polling / sse / websockets y todos se conectaron con éxito inicialmente y llamaron al controlador OnOpen después de la conexión inicial:

 var transport = 'long-polling'; var request = { url:'/Chat2/chat', contentType : "application/json", logLevel : 'debug', transport : transport, trackMessageLength : true, reconnectInterval : 5000, fallbackTransport: 'polling'}; request.onOpen = function(response) { console.log('OnOpen: Atmosphere connected using ' + response.transport ); transport = response.transport; }; request.onReopen = function(response) { console.log('OnReopen: connection reopened'); }; request.onTransportFailure = function(errorMsg, request) { atmosphere.util.info(errorMsg); if (window.EventSource) { request.fallbackTransport = "polling"; } console.log('OnTransportFailure: Atmosphere Chat. Default transport is WebSocket, fallback is ' + request.fallbackTransport); }; request.onMessage = function (response) { alert('OnMessage: message received'); }; request.onClose = function(response) { console.log('OnClose: Client closed the connection after a timeout'); subSocket.push(atmosphere.util.stringifyJSON({ author: author, message: 'disconnecting' })); }; request.onError = function(response) { console.log('OnError: error occurred'); console.log(response); logged = false; }; request.onReconnect = function(request, response) { console.log('OnReconnect: Reconnected'); }; subSocket = socket.subscribe(request); $('#chatSubmit').click(function() { var msg = $('#chatText').val(); subSocket.push(atmosphere.util.stringifyJSON({ author: author, message: msg })); $('#chatText').val(''); }); 

debe instalar el TrackMessageLengthInterceptor si configura trackMessageLength: true en el lado del cliente. Así que agrégalo a la lista de interceptores de AtmosphereHandlerService.

– Jeanfrancois

Intereting Posts