Como criar notifications push usando o Atmosphere

Eu quero usar a atmosfera para desenvolver um sistema de notificação.

Eu sou muito novo em Atmosphere tão desculpas se estou errado em algum lugar. O que eu entendi é quando um ator publica algo que eu salvar a ação de notificação para o database. O que eu não entendo como o receptor receberá essas notifications em tempo real.

O remetente que eu conheço fará algo como seguir

event.getBroadcaster().broadcast( objectMapper.writeValueAsString("Some Message")); 

Agora eu não sou capaz de descobrir como o receptor pode receber essa mensagem.

Por exemplo . Eu quero adicionar um object de usuário como amigo. Portanto, quando o Usuário1 adiciona a transmissão do Usuário2 Usuário1, mas como eu envio a notificação para o Usuário2. Eu tenho dificuldade em entender isso.

Tecnicamente, eu quero algo parecido com o facebook ou a notificação do Gmail, onde na atividade do usuário outros usuários recebem notifications.

Basicamente, o que você precisa é implementar Publish-subscribe no topo do Atmosphere.

O Atmosphere consiste em duas partes: lado do cliente (baseado em javascript) e lado do servidor (baseado em java).

Primeiro de tudo você precisa configurar o lado do servidor: Instalando Atmosphere

Ou seja, servlet ou filtro, é necessário para que possa adicionar AtmosphereResource ao HttpServletRequest .

AtmosphereResource representa uma conexão de cliente único no lado do servidor.

O Broadcaster é na verdade um contêiner para esses resources, para que você não precise lidar com pesquisa / iteração / simultaneidade quando precisar enviar para várias conexões. (Observe que várias conexões podem ser produzidas por um único cliente).

No lado do servidor, você precisa fornecer aos clientes um terminal para assinar notifications. Por exemplo, se você estiver usando o Spring-MVC, ele pode ser assim (omitindo validações / autenticações, etc.):

 @RequestMapping(value = "/user-notifications/{userId}") @ResponseStatus(HttpStatus.OK) @ResponseBody public void watch(@PathVariable("userId") String userId, HttpServletRequest request) throws Exception { //Atmosphere framework puts filter/servlet that adds ATMOSPHERE_RESOURCE to all requests AtmosphereResource resource = (AtmosphereResource)request.getAttribute(ApplicationConfig.ATMOSPHERE_RESOURCE); //suspending resource to keep connection resource.suspend(); //find broadcaster, second parameter says to create broadcaster if it doesn't exist Broadcaster broadcaster = BroadcasterFactory.getDefault().lookup(userId,true); //saving resource for notifications broadcaster.addAtmosphereResource(resource); } 

Quando algo acontece, você pode notificar clientes assim:

 public void notify(User user, Event event){ Broadcaster b = BroadcasterFactory.getDefault().lookup(user.getId()); if (b!=null){ b.broadcast(event); } } 

No lado do cliente, você precisa enviar uma solicitação de assinatura e ouvir events subsequentes, como este:

 var request = new atmosphere.AtmosphereRequest(); request.url = '/user-notifications/'+userId; request.transport = 'websocket'; request.fallbackTransport = 'streaming'; request.contentType = 'application/json'; request.reconnectInterval = 60000; request.maxReconnectOnClose = 1000; request.onMessage = function(response){ console.log(response); alert('something happend
'+response); }; that.watcherSocket = atmosphere.subscribe(request);

Então, para resumir:

  1. Cliente envia solicitação “Eu quero receber este tipo de notifications”.
  2. O servidor recebe solicitações, suspende e salva a conexão em algum lugar (no seu código ou no Broadcaster).
  3. Quando algo acontece, o servidor procura por uma conexão suspensa e envia uma notificação nela.
  4. O cliente recebe uma notificação e o retorno de chamada é invocado.
  5. Lucro!!!

Este wiki tem explicações para alguns conceitos por trás do Atmosphere e links para outra documentação.

Atmosphere suporta WebSocket. Se você quer escrever um cliente java, você pode tentar https://github.com/TooTallNate/Java-WebSocket

Veja a seção Escrevendo seu próprio WebSocket Client

Intereting Posts