Blazeds服务器向客户端实时推送数据配置详解

需积分: 9 1 下载量 192 浏览量 更新于2024-09-13 收藏 42KB DOCX 举报
“Blazeds向客户端推送数据。” Blazeds是一种强大的 Flex 和 Java 之间的集成解决方案,它允许双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。这种技术在实时应用,如股票交易、在线游戏或者即时通讯中非常有用。 一、配置 StreamingAMFChannel 1. services-config.xml 配置 在 `services-config.xml` 文件中,我们需要定义一个 StreamingAMFChannel,这是一种支持长连接的通道,它能保持服务器与客户端的持续连接,以便服务器可以随时推送数据。以下是一个示例配置: ```xml <channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel"> <endpoint url="http://134.160.149.156:8400/blazeds_test/messagebroker/streamingamf" class="flex.messaging.endpoints.StreamingAMFEndpoint"/> <properties> <idle-timeout-minutes>0</idle-timeout-minutes> <max-streaming-clients>10</max-streaming-clients> <server-to-client-heartbeat-millis>5000</server-to-client-heartbeat-millis> <user-agent-settings> <user-agent match-on="MSIE" kickstart-bytes="2048" max-streaming-connections-per-session="8"/> <user-agent match-on="Firefox" kickstart-bytes="2048" max-streaming-connections-per-session="1"/> </user-agent-settings> </properties> </channel-definition> ``` - `idle-timeout-minutes` 设为 0 表示不设置空闲超时时间。 - `max-streaming-clients` 指定了该通道可同时服务的最大流式客户端数量。 - `server-to-client-heartbeat-millis` 是服务器到客户端的心跳间隔,保持连接活跃。 - `user-agent-settings` 部分用于针对不同浏览器(如 MSIE 和 Firefox)设置不同的优化参数,如 `kickstart-bytes` 和 `max-streaming-connections-per-session`。 二、messaging-config.xml 配置 2. destination 配置 在 `messaging-config.xml` 文件中,我们需要定义目的地(destination),这将指定数据将被推送到哪里。例如: ```xml <destination id="tick-data-feed"> <properties> <server> <allow-subtopics>true</allow-subtopics> <subtopic-separator>.</subtopic-separator> </server> </properties> </destination> ``` - `allow-subtopics` 设置为 true 允许使用子主题,这使得可以推送更具体的数据。 - `subtopic-separator` 定义了子主题之间的分隔符,例如这里使用的是点号(.)。 三、Blazeds 数据推送原理 Blazeds 使用 Adobe LiveCycle Data Services (LCDS) 的基础架构,通过 HTTP 长轮询或 Flash Socket 实现数据推送。当客户端连接到服务器后,服务器会保持连接直到有新数据可用。一旦数据准备好,服务器会立即发送,而不是等待客户端请求。 四、客户端处理 在 Flex 客户端,你可以创建一个 `MessageBroker` 对象并订阅特定目的地来接收推送的数据。当服务器推送数据时,客户端会收到 `Message` 事件,并可以在事件处理器中处理这些数据。 ```actionscript var broker:MessageBroker = MessageBroker.getInstance(); broker.subscribe("tick-data-feed", onMessageReceived); private function onMessageReceived(event:MessageEvent):void { var message:Message = event.message as Message; // 处理接收到的消息 } ``` Blazeds 的数据推送功能是通过精细配置和客户端服务器间的实时连接实现的,这极大地提高了应用程序的交互性和实时性。不过,需要注意的是,这种持续的连接可能会增加服务器负载和带宽消耗,因此在实际应用中需要权衡性能和资源使用。