如何使用Atmosphere设计推送通知

我想利用气氛来开发通知系统。

我对Atmosphere非常陌生,因此如果在某个地方输入错误,我深表歉意。我了解的是,当Actor发布某些内容时,我会将通知操作保存到数据库中。我不明白接收方将如何实时接收这些通知。

我知道的发件人将执行以下操作

event.getBroadcaster().broadcast(

objectMapper.writeValueAsString("Some Message"));

现在,我无法弄清楚接收者如何接收此消息。

例如 。我想将用户对象添加为朋友。因此,当User1添加User2时,User1广播但不是我如何将通知推送到User2。我很难理解这一点。

从技术上讲,我想要类似facebook或gmail通知之类的东西,其中在用户活动中其他用户会收到通知。

回答:

基本上,您需要在Atmosphere之上实现发布-

订阅。

气氛由两部分组成:客户端(基于javascript)和服务器端(基于java)。

首先,您需要配置服务器端:安装Atmosphere

这是servlet或过滤器,它是必需的,以便可以将AtmosphereResource添加到 HttpServletRequest中

AtmosphereResource表示服务器端的单个客户端连接。

Broadcaster 实际上是这些资源的容器,因此当您需要发送到多个连接时,您不需要处理查找/迭代/并发。(请注意,单个客户端可以产生多个连接)。

在服务器端,您需要为客户端提供一个端点来订阅通知。例如,如果您使用的是Spring-MVC,它可能会像这样(省略验证/身份验证等):

@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);

}

发生某些情况时,您可以像这样通知客户:

public void notify(User user, Event event){

Broadcaster b = BroadcasterFactory.getDefault().lookup(user.getId());

if (b!=null){

b.broadcast(event);

}

}

在客户端,您需要发送订阅请求并侦听后续事件,如下所示:

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<br>'+response);

};

that.watcherSocket = atmosphere.subscribe(request);

因此,总结一下:

  1. 客户端发送请求“我想接收这种通知”。
  2. 服务器接收请求,挂起并将连接保存在某个地方(在您的代码中或在Broadcaster中)。
  3. 当发生某种情况时,服务器会查找暂停的连接并在其中发送通知。
  4. 客户端收到通知并调用回调。
  5. 利润!!!

该Wiki解释了Atmosphere背后的一些概念,并提供了其他文档的链接。

以上是 如何使用Atmosphere设计推送通知 的全部内容, 来源链接: utcz.com/qa/412676.html

回到顶部