Soquete de atmosfera estabelecido mas nenhum dado sendo recebido / enviado

Estou seguindo o tutorial Atmosphere para obter uma configuração básica do aplicativo de bate-papo. Atualmente, ao executar o javascript, parece que é possível estabelecer uma conexão com o servidor usando sockets da web. Eu recebo o seguinte no console do Chrome:

Invoking executeWebSocket core.js:2298 Using URL: ws://localhost:8080/web-transport/chat?X-Atmosphere-tracking-id=0&X-Atmosphere-Framework=1.1&X-Atmosphere-Transport=websocket&X-Cache-Date=0&Content-Type=application/json core.js:2298 Websocket successfully opened 

No entanto, quando tento publicar dados (subSocket.push (…)), nada parece acontecer. Eu tentei depurar o AtmosphereHandlerService, mas ele nunca parece ser atingido (e nenhum registro está sendo gerado.

O que estou perdendo isso causaria isso?

Até agora eu tenho o seguinte:

web.xml

   AtmosphereServlet AtmosphereServlet  AtmosphereServlet AtmosphereServlet org.atmosphere.cpr.AtmosphereServlet  <!-- true -->    AtmosphereServlet  /chat/*   

ChatAtmosphereHandler.java

 @AtmosphereHandlerService(path = "/chat") public class ChatAtmosphereHandler implements AtmosphereHandler { public void onRequest(AtmosphereResource resource) throws IOException { AtmosphereRequest request = resource.getRequest(); if (request.getMethod().equalsIgnoreCase("GET")) { resource.suspend(); } else if (request.getMethod().equalsIgnoreCase("POST")) { resource.getBroadcaster().broadcast(request.getReader().readLine().trim()); } } public void onStateChange(AtmosphereResourceEvent event) throws IOException { AtmosphereResource resource = event.getResource(); AtmosphereResponse response = resource.getResponse(); if (resource.isSuspended()) { response.getWriter().write("Hello"); switch (resource.transport()) { case JSONP: case LONG_POLLING: event.getResource().resume(); break; case WEBSOCKET: case STREAMING: response.getWriter().flush(); break; } } else if (!event.isResuming()) { event.broadcaster().broadcast("bye bye"); } } public void destroy() { } } 

Dependências Maven:

   org.atmosphere atmosphere-runtime 1.0.2   org.atmosphere atmosphere-jersey 1.0.2   eu.infomas annotation-detector 3.0.1  

e finalmente o javascript:

 $(document).ready(function() { var socket = $.atmosphere; var subSocket = null; var request = { url: 'http://localhost:8080/web-transport/' + 'chat', contentType : "application/json", logLevel : 'debug', transport : 'websocket' , fallbackTransport: 'long-polling' }; request.onOpen = function(response) { console.log('onopen', response); }; request.onReconnect = function (request, response) { console.log('onreconnect', request, response); }; request.onMessage = function (response) { console.log('onmessage', response); }; request.onError = function(response) { console.log('onerror', response); }; $('#send').click(function(){ subSocket.push(JSON.stringify({ author: 'me', message: 'hello' })); }); $('#subscribe').click(function(){ subSocket = socket.subscribe(request); }); }); 

Eu finalmente descobri que o problema não era com o código ou atmosfera, mas com Glassfish.

A solução é ativar os sockets da web usando o seguinte comando:

 asadmin set configs.config.server-config.network-config.protocols.protocol.http-listener-1.http.websockets-support-enabled=true 

Certifique-se de executar o comando usando o prompt de comando. Eu já habilitei sockets web via admin gui e de alguma forma parece que não foi aplicado corretamente. Depois que eu corri o comando acima e tentei o código acima, funcionou bem.

Intereting Posts