Chinaunix首页 | 论坛 | 博客
  • 博客访问: 258850
  • 博文数量: 70
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 930
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-22 12:32
文章存档

2009年(42)

2008年(28)

我的朋友

分类:

2009-07-25 11:24:51

1、客户端应用 client
   客户端比较典型的是Adobe flex或AIR应用,均通过flex组件与BlazeDS通讯,包括:RemoteObject、httpService、webService、producer、consumer,处第一者外,后4者均在flex sdk中。


2、BlazeDS的服务 service:
   部署在j2ee容器中,让j2ee程序成为BlazeDS需要以下配置:
    1、加入BlazeDS及其需要的jar包
    2、配置问题件 WEB-INF/flex
    3、在web.xml文件中定义MessageBrokerServlet and a session listener

3、BlazeDS的核心
   核心在于RPC service和Messaging Service。

   RPC service:

   远程程序调用(RPC)服务是应用程序访问外部数据的比较好的方法,通过调用、返回的形式。RPC允许客户应用程序异步请求远程程序,处理请求后直接返回给客户端。可以通过HTTP GET or POST (HTTP services), SOAP (web services), 或者 Java objects (remoteobject services)等RPC组件直接访问数据。

   如果想通过使用RPC Services提供一些企业级功能,如不同域之间数据交换的代理功能、客户端认证、服务器端日志、本地化支持、RPC Services服务集中化管理等功能时,BlazeDS通过使用RemoteObject控件可以轻松实现,而不需要配置他们像SOAP-compliant网络服务。

当客户端RPC控件调用远程服务时。这个控件将返回的数据储存到一个ActionScript 对象,你可以轻易的获得这些数据。注意:HTTP services和web services可以直接使用,不包括Blazeds,但是RemoteObject不能脱离Blazeds或者ColdFusion。
messaging service:
客户端发送消息就是消息生产者(producers)。在Flex应用中通过使用Producer控件来定义一个producer。客户端接收消息就是消息消费者(consumer),使用Consumers组件。Consumer控件负责订阅和接收服务器端某一个目的地的消息,Producer控件发送消息到这个目的地。

4、服务适配器 adapter
BlazeDS可以访问各种不同的数据持久化方案,比如数据库、JMS等其他持久化机制。

5、基于消息的框架

Blazeds使用基于消息的框架在客户端和服务端之间发送和返回数据。Blazeds在它们之间使用了两个交换模式。 第一个模式是请求---响应模式,客户端发送请求给服务端处理。服务端返回处理结果给客户端。RPC Service就是使用这个模式。 第二个模式是发布—订阅模式,即服务端发布消息设置,客户端订阅了去接收它们。Messaging Service使用这个模式将数据推给“感兴趣“的客户端。Messaging Service同样使用求/响应模式来解决一些发布消息、数据交换等问题。

channels and endpoints(通道和端点):
端点和通道是相互映射的。

   客户端使用通道发送消息给服务端。通道封装了消息的格式、网络格式、服务端解析方式、目的和应用代码。通道封装以及转换信息,并且传达他们到服务端的一个端点。 
   通道同样使得发送和返回的消息变得有序。有序对保证数据传送的一致性和可预见性起到重要的作用 
   在服务器端,通道是与基于Java的端点发生交换的,端点负责解析消息成特定的协议模式,然后把它传送给普通Java形式的“消息代理人”(Message Broker),最终由消息代理人决定该消息发往何处,路由给恰当的目的地

    Blazeds包括几个特殊的通道,包括标准的和加密的AMF通道。HTTP(AMFX)通道。AMF和HTTP通道都支持无轮询的请求/响应模式以及客户轮询模式来模拟实时通信,而AMF和HTTP流通道模式提供了真正的数据流实时模式。                 
通道专题另开,在此不赘述。

6、通道和通道设置:
   
Flex组件使用通道和Blazeds服务端交互。一条通道包含多条道路,他们的基础功能就是提供Flex客户端和Blazeds服务端的交流。通道中的道路都是按性能排序的。Flex组件会尝试连接第一条道路,不过这并不能保证一定能连接,有可能使用的还是道路中后面的那几条。它会搜寻通道中的道路知道连接上或者已经没有连接。通道封装了Flex组件和Blazeds服务端之间的连接方式。概念上来说,通道是Flex组件下面的组件,负责处理组件和Blazeds服务端之间的交互,和Blazeds服务端上相应的端点通信。

Flex客户端使用不同的通道类型。例如AMFChannel和HTTPChannel。通道选择有很多的因素,包括你的程序构建的类型。如果你想要使用无二进制压缩的方式传输,可以使用HTTPChannel,它使用AMFX(AMF in XML),一种无二进制压缩的方式。

例子在services-config.xml文件中创建了一个AMFChannel通道,与服务器上的AMFEndpoint通信:

还可以:
a)、在mxml文件中指定通道;
b)、为目的地指定通道和端点,可以指定应用级别的默认通道,也可单独指定;
c)、

7、消息
  Flex客户端组件和Blazeds服务端都是基于消息进行交流的,Flex组件使用几种消息和他们对应的服务交流。所有的消息有基于客户端的(ActionScript)和基于服务端(Java)的,因为这些消息分别在客户端和服务端序列化和反序列化。 
  一些消息,比如应答消息和命令消息,使用不同的Flex组件和Blazeds服务。其他的消息类型使用特殊的Flex组件和Blazeds服务。例如消息生产者发送消息给消息消费者组件。 
  其他情况下,你不可以直接写代码构造和发送消息。例如,你只是使用远程组件(RemoteObject)调用远程方法远。远程组件创建一个远程消息封装给远程对象调用。返回的消息封装在一个ResultEvent中。 

8、BlazeDS服务端体系
  Flex客户端通过通道发送请求到Blazeds服务的端点上。从端点开始,请求经过一些列的Java对象包括消息传播对象、服务对象、目标对象以及最终的适配器对象。适配器将请求实现为本地的、或者contacting a backend system或者远程服务例如JMS服务。

9、端点 endpoint
  基于服务的端点是通过MessageBrokerServlet启动的,需要在web.xml中配置的。除此之外,HTTP session监听器也要加入到web程序的web.xml中。示例如下:

>

     <servlet-name>MessageBrokerServletservlet-name>

       <display-name>MessageBrokerServletdisplay-name>

       <servlet-class>flex.messaging.MessageBrokerServletservlet-class>

 <init-param>

        <param-name>services.configuration.fileparam-name>

        <param-value>/WEB-INF/flex/services-config.xmlparam-value>

   init-param>

       <load-on-startup>1load-on-startup>

servlet>


    客户端程序使用通道和Blazeds端点通信。端点和通道是相互映射的,保持端点和通道使用相同的消息格式是很重要的。如果通道使用AMF消息格式,比如AMFChannel,端点也必须AMF消息格式与之匹配,比如AMFEndpoint。


    可以在WEB-INF/flex目录下的services-config.xml配置端点。 


MessageBroker :

  MessageBroker是为了将消息路由给服务端,是Blazeds在服务端的核心。在端点经过初步的处理请求并且将提炼出来的消息传递给MessageBroker。MessageBroker查看消息的目的地,然后将他传递过去。如果目的地有安全现在,他就在传递之前运行检查证明。


服务和目的地 


服务和目的地是消息在Blazeds服务中传递处理的下一站。系统包括4个服务以及他们对应的目的地: 

  RemotingService(远程服务) 和 RemotingDestination(远程目的地)

  HTPProxyService(HTTP代理服务) and HTTPProxyDestination(HTTP代理目的地) 

  MessageService(消息服务) and MessageDestination(消息目的地) 


服务是消息传递过来的目标,可以将目的地想象成服务的实例。例如,远程组件和远程服务通信中,你必须指定一个远程目标,例如你要调用的类的方法。这种客户端和服务端的映射是按照下面来实现的: 

  HTTPService 和 WebService HTTPProxyService/HTTPProxyDestination通信 

  RemoteObject和 RemotingService/RemotingDestination通信 

  Producer、Consumer和 MessageService/MessageDestination通信 


可以在sevices-confi.xml中配置服务和目的地,但是最好是将他们放进不同的文件: 

    RemotingService配置在remoting-confi.xml 

    HTTPProxyService配置在proxy-config.xml 

    MessageService配置在messaging-config.xml 

 

    适配器和”随机”的编译是消息处理链中的最后一环。当一个消息抵达正确的目的地以后,它就会被传递给适配器被实现成本地的或者后台系统或者一个远程服务(JMS)。Blazeds使用如下的方式在适配器和目的地间映射 

    RemotingDestination uses JavaAdapter 

    HTTPProxyDestination uses HTTPProxyAdapter or SOAPAdapter 

    MessageDestination uses ActionScriptAdapter or JMSAdapter  

 

阅读(1324) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~