atmosphere js_教程:Atmosphere 1.0,JVM上的WebSocket可移植性

本文介绍了Atmosphere Framework,一个用于创建可移植异步应用的Java / JavaScript框架,支持Groovy,Scala和Java。教程通过一个简单的聊天应用示例展示了如何使用AtmosphereHandler在服务器端编写代码,并使用atmosphere.js在客户端进行交互。此外,还讨论了如何处理WebSocket和长轮询等传输方式,以及如何实现云部署和服务器间的消息共享。
摘要由CSDN通过智能技术生成

atmosphere js

在此《 JAX Magazine》教程中,JeanFrancois Arcand向我们介绍了Atmosphere Framework,这是一个Java / Javascript框架,允许使用Groovy,Scala和Java创建可移植的异步应用程序。


Atmosphere Framework随附有一个JavaScript组件,该组件支持所有现代浏览器,并且还包含几个服务器组件,这些组件支持所有主要的基于Java的WebServer。 该框架的目的是允许开发人员编写应用程序,并让该框架透明地发现客户端和服务器之间的最佳通信渠道。

例如,开发人员可以编写与支持该协议的浏览器或服务器一起使用时将使用WebSocket协议的应用程序,并在不支持WebSocket协议的情况下透明地回退到HTTP。 例如,一个Atmosphere应用程序可以通过HTTP与Internet Explorer 6、7、8和9正常运行,并且与Internet Explorer 10一起使用时可以使用WebSocket协议。

要了解Atmosphere的强大功能,让我们构建一个简单的聊天应用程序。 假设我们的聊天应用程序仅支持一个聊天室,以简化逻辑。

首先,让我们编写服务器端组件。 气氛支持四个组成部分:

大气运行时间:大气层的核心模块。 所有其他模块均基于此模块。 该模块提供了两个用于构建应用程序的简单API: AtmosphereHandlerMeteorAtmosphereHandler是实现的简单接口,而Meteor API是可以在基于Servlet的应用程序中检索或注入的类。

大气球衣:对Jersey REST框架的扩展。 该模块公开了一组新的注释,从而公开了Atmosphere的运行时功能。

privacy-gwt:对GWT框架的扩展。

服务器端

在本文中,我将使用大气运行时来演示编写一个简单的异步应用程序有多么简单。 让我们从使用AtmosphereHandler的服务器组件开始。 AtmosphereHandler的定义如下面的清单1所示。

清单1:AtmosphereHandler

public interface AtmosphereHandler {

    void onRequest(AtmosphereResource resource) throws IOException;

    void onStateChange(AtmosphereResourceEvent event) throws IOException;

    void destroy();
}

每当将请求映射到与AtmosphereHandler关联的路径时,都会调用onRequest方法。 通过注释AtmosphereHandler的实现来定义路径。

@AtmosphereHandlerService(path = “/<path>”)

在Atmosphere中, AtmosphereResource表示物理连接。 AtmosphereResource可用于检索有关请求的信息,对响应执行操作,更重要的是,可用于在onRequest执行期间挂起连接。 WebServer必须知道什么时候需要保持连接开放以进行将来的操作(例如,用于WebSocket),以及何时需要升级连接以支持协议,例如http(流,长轮询,jsonp或服务器端事件)。 。

onStateChange方法( 图1 )将在以下情况下由Atmosphere调用:

  • 发生广播操作,需要采取措施。 广播者总是启动广播操作。 可以看作是沟通的渠道。 应用程序可以创建许多通信渠道,并使用BroadcasterFactory类检索它们。 AtmosphereResource始终与一个或多个广播者关联。 我们还可以将广播者视为事件队列,每次广播新事件时,您都可以在其中收听并得到通知。 广播可以从onRequestonStateChange或服务器端的任何位置进行。

  • 连接已关闭或超时(没有活动发生)。

在视觉上可以看作是:最后,当取消部署或停止Atmosphere时,将调用destroy方法。

复杂? 对于我们来说幸运的是,该框架附带了AtmosphereHandlers ,几乎可以在所有场景中使用它,这使开发人员可以在已处理连接生命周期的同时专注于应用程序逻辑。 让我们使用OnMessage <T> AtmosphereHandler 编写我们的应用程序( 清单2 )。

 

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

这里的主要思想是将连接生命周期尽可能多地委托给Atmosphere的即用组件。 首先,我们使用@AtmosphereHandlerService注释对ChatRoom类进行注释,并定义路径和拦截器。 AtmosphereInterceptor可以看作总是在AtmosphereHandler#onRequest之前和之后调用的过滤器。 AtmosphereInterceptor可用于处理请求/响应,处理生命周期等。例如,暂停和广播( 图2 )。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值