blazeds学习笔记一整体认识
BlazeDS 是一组服务器端的通讯服务,它能够使得运行在浏览器的 Adobe Flex 应用程序服与服务器端的 Java 应用程序相互通信。
整个体系主要包括 通道、端点、消息、服务、目的地、适配器 等,把这 些搞懂也就差不多了。 通道使得组件能够 和 Blazeds 服务端的端点通信,将请求送到目的地 。 端点和通道是相互映射的 。
-
基于消息的框架
Blazeds 使用基于消息的框架在客户端和服务端之 间发送和返回数据。
Blazeds
在它们之间使用了两个交换模式。第一个模式是请求
—
响应模式,客户端发送请求给服务端处理。服务端返回处理结果给客户端。
RPC Service
就是使用这个模式。
第二个模式是发布—订阅模式,即服务端发布消息设置,客户端订阅了去接收它 们。
Messaging Service
使用这个模式将数据推给“感兴趣“的客户端。
如图, BlazeDS 提供了三种关键的服务。
Remoting Service 。提供一种客户端直接调用服务器端 java 方法的方式。
Message Service 。提供一种基于发布 / 订阅模式的消息服务,可以用于实现实时的数据推送或协作的 flex 应用。
Proxy Service。 通过 proxy service ,使得 flex 应用可以实现安全的,受限的跨域访问, 也 就是说它让您的 Flex 应用程序访问的服务可以处于不同的 域,而不需要在目标域里配置 crossdomain.xml 权 限文件。
-
Blazeds 客户端结构
BlazeDS 客户端使用 BlazeDS 提供的基于消息的框架与服务器通讯。消息框架的客户端部分是 Channels , Channels 封装了 flex 客户端与 BlazeDS 服务器的连接。
下 图是 BlazeDS 客户端的结构图
Flex 通讯组件
Flex 提供了 RemoteObject , HTTPService , WebService , Producer , Consumer
等可以与 BlazeDS 通讯的组件,这些组件都包含在了 Flex SDK 中,是 Flex 组件库的一部分。
Channels Set
Channels 封装了 Flex 组件与 BlazeDS 服务之间的连接,是处于 Flex 组件之下的一个通讯层。
BlazeDS 提供了 AMFChannel 和 HTTPChannel 。 Flex 客户端可以使用不同类型的 Channel 与 服务器通讯。
Channel 是在 services-config.xml 中配置,下面是一个 AMFChannel 的配置:
<channels>
…
<channel-definition id=”samples-amf” type=”mx.messaging.channels.AMFChannel”>
<endpoint url=”http://localhost:8400/myapp/messagebroker/amf” type=”flex.messaging.endpoints.AMFEndpoint”/>
</channel-definition>
</channels>
amf 协议 。 Amt 全称是 action message format ,它是一种二进制格式,专用于 as 和服务 器端通讯,比 http 通讯要快很多,支持多种数据类型,如 java , .net,php 等。
-
Blazeds 服务器端结构
BlazeDS 服务是一个 J2EE 的 web 容器, Flex 客户端通过 channel 发送一个请求,请求在 BlazeDS 服务端会到达一个 endpoint ,从 endpoint 开始,请求会通过一条 Java 对象处理链,包括: MessageBroker, service, destination, adapter ,结构如下:
MessageBroker
MessageBroker 负责转发消息到 service ,接收到消息时, MessageBroker 查看消息消息的 destination ,并把消息转发给目标 service 。如果 destination 有安全限制保护,在转发之前, MessageBroker 会执行身份认证和授权检查。 M essageBroker 的配置在 BlazeDS 应用的 WEB-INF/flex/services-config.xml 文件中
Services 和 destinations
Services 和 destinations 在 BlazeDS 服务中,是消息处理链的下一环节。
BlazeDS 包括四种一一对应的 services 和 destinations:
RemotingService 和 RemotingDestination
HTPProxyService 和 HTTPProxyDestination
MessageService 和 MessageDestination
不同的 Flex 组件的请求是由不同的 Services 和 destinations 进行 处理的,对应关系如下:
HTTPService 和 WebService 与 HTTPProxyService/HTTPProxyDestination
RemoteObject 和 RemotingService/RemotingDestination
Producer /Consumerhe 和 MessageService/MessageDestination
services 和 destinations 可以在 services-config.xml 配置 , 但是最好的做法是分别在下面的文件中进行配置:
RemotingService 在 remoting-config.xml 中配置
HTTPProxyService 在 the proxy-config.xml 中配置
MessageService 在 messaging-config.xml 中配置
Adapters
当 一个消息到达正确的 destination 时, destination 会把消息发到相应的一个 Adapter 。 Destination 与 Adapter 的对应关系如下:
RemotingDestination 使用 JavaAdapter
HTTPProxyDestination 使用 HTTPProxyAdapter 或 SOAPAdapter
MessageDestination 使用 ActionScriptAdapter 或 JMSAdapter
-
开始 Blazeds
• 下载 Blazeds http://www.alisdn.com/wordpress/?paged=2
• 解压到 tomcat 的 webapps 目录下
• 启动 tomcat
• 访问 http://127.0.0.1:8080/ds-console/
-
开发 Blazeds 应用
加入 blazeds\WEB-INF\lib\ 下的 jar 包
复制 blazeds\WEB-INF\flex 下的文件到项目的 WEB-INF/flex 目录下,包括:
messaging-config.xml
proxy-config.xml
remoting-config.xml
services-config.xml
在 web.xml 文件中定义 MessageBrokerServlet 和 session listener