- 浏览: 589833 次
文章分类
- 全部博客 (174)
- Core Java 学习 (6)
- Hibernate 学习 (3)
- Struts 学习 (3)
- Spring 学习 (9)
- EJB 学习 (0)
- 设计模式 (0)
- Oracle 学习 (6)
- JRuby (0)
- PHP (18)
- MySql (7)
- Apache (6)
- Informix (2)
- JSTL (1)
- CSS+HTML (8)
- Ajax (2)
- javaScript (16)
- reverse Ajax (1)
- Discuz (7)
- 网站 (11)
- SEO (5)
- Linux (4)
- ecshop (1)
- 电子商务 (1)
- 文档在线浏览 (18)
- 服务器技术 (10)
- flex (17)
- 用户体验 (1)
- java (1)
- flex+blazeDS (1)
- tomcat (1)
- 开发管理 (1)
最新评论
-
niaoqq1:
真坑爹,全是中文字符,复制全部报错!
<c:forEach 详解 -
jhys7s8jd:
pdf打印机下载http://www.onlinedown.n ...
命令行下转换word文档成PDF -
海豚12315:
flashPaper读取磁盘上的文件路径,
最好是放到某个系统 ...
在线文档阅读实现的解决方案 -
八月约克:
火狐不支持这个东东
Scripting.Dictionary的使用 -
longgol:
有一问:怎么通过flashPaper读取磁盘上的文件路径呢。我 ...
在线文档阅读实现的解决方案
参考文章 http://hi.baidu.com/wosinmaiken/blog/item/71f700fdd14aa64fd6887de9.html 这个例子非常经典 在 BlazeDS 3.4 和 BlazeDS 4.0 都可以跑起来 下载链接 http://download.csdn.net/source/2623325 观察者模式的一种实现 订阅者 发布者 模式 客户端是订阅者,服务端是发布者。发布者会向所有订阅者发布相同的信息。 如何区分不同的订阅者。以便实现个性化订阅。 http://topic.csdn.net/u/20100521/17/29d05d17-e3b9-415b-89c1-692b1083072f.html 一种错误的认识 entityName 可以是 userId 上面这种方法不对 如果某一订阅方只想收到特定的消息,可以在订阅时使用selecor属性来指定过滤条件 经典文章 写的非常经典 Flex + BlazeDS 学习笔记 (一) --- BlazeDS的功能原理及配置实例 http://blog.csdn.net/mebusw/archive/2010/07/17/5742172.aspx 仔细研读 BLazeDS 官方示例 BlazeDS Test Drive里面示例了主要的功能: HTTPService 示例:客户端可以发布和订阅消息,在messaging-config.xml配置消息目的地,在程序中用“destination”映射关系来访问该类的示例,如示例中的“chat”。注意,通道及其端点(endpoint)真正的定义是在service-config.xml中,messaging-config.xml中仅仅是引用它们。 可以看到,messaging包括两大类不同的消息通道。分别是streaming channel和polling channel,每一类又有一些扩展类型。 如果不在XML中配置消息通道,也可以在Actionscript脚本中动态赋值。 订阅者如何使用selecor属性来制定过滤条件 实现消息机制,可以 AS + Java 也可以 AS + AS 1 AS + Java MessageBroker msgBroker = MessageBroker.getMessageBroker(null); tick.setSeqno(String.valueOf(i)); AsyncMessage msg = new AsyncMessage(); } 2 AS + AS <mx:Producer id="producer" destination="chat"/> WEB-INF\flex\messaging-config.xml 常见错误 [MessagingError message='配置中不存在通道“my-streaming-amf”。'] 方案一 报错的代码段 var consumer:Consumer = new Consumer(); 文件 属性 Flex服务器 应用程序服务器类型 无 改成 J2EE 这个配置在项目根目录 .flexProperties 文件中 缺点:每次发布的时候,都要修改次配置 方案二 var myStreamingAMF:AMFChannel = new StreamingAMFChannel("my-streaming-amf", Constant.portalServerUrl+"/messagebroker/streamingamf"); 客户端如何使用选择器 服务端 Map<String,String> map = new HashMap<String, String>(); AsyncMessage msg = new AsyncMessage(); 客户端 var myStreamingAMF:AMFChannel = new StreamingAMFChannel("my-streaming-amf", Constant.portalServerUrl+"/portal/messagebroker/streamingamf"); 注意 new StreamingAMFChannel 构造函数中的 portalServerUrl 不要忘记项目域名 报错:Attempt to subscribe or unsubscribe to the subtopic, 'tick', on destination, 'feed', that does not allow subtopics failed. messaging-config.xml 文件中 <destination id="feed"> 红色部分代码不能少 报错 [BlazeDS]Endpoint with id 'my-streaming-amf' cannot grant streaming connection to FlexClient with id '9995557A-450B-A6F7-59EF-1FE656A94F1E' because max-streaming-connections-per-session limit of '1' has been reached. 在 service-config.xml 中有 <channel-definition id="my-streaming-amf" class="mx.messaging.channels.StreamingAMFChannel"> 默认是 1 改成 8 即可 报错 打印出来的是 null private static FeedThread thread; AsyncMessage msg = new AsyncMessage(); msg.setBody(Object o);//接收的是对象 但是界面上一般展现的是字符串 //message 成功 所以要将整形 i 加一个字符串,否则接界面强制类型转换将打印一堆 null
java端:
AsyncMessage msg = new AsyncMessage();
msg.setClientId(entityName);
flex端:
var consumer:Consumer = new Consumer();
consumer.subtopic = entityName;
根据entityname来区分
Web Services
Remote-Object
Messaging
消息本身包含消息头和消息体,消息头的格式是固定的,消息体的内容可以随意写。接触过状态机、分布式嵌入式系统编程的会很容易理解。
消息服务允许Flex客户端可以发布(Publish)和订阅(Subscribe)消息,相应的,客户端的被称为生产者(Producer)和消费者(Consumer),其实也就是发送和接受消息了。
当一个消息被发到已订阅的目的地(destination)时,就会触发一个客户端的message事件。发布的任何消息会发给所有订阅的人,即使是生产者自己。如果某一订阅方只想收到特定的消息,可以在订阅时使用selecor属性来指定过滤条件,只有符合条件的消息才会被服务器转发。如果想要服务器产生消息,可以产生一个flex.messaging.messages.AsyncMessage类的实例,用flex.messaging.MessageBroker发送出去。
采用polling channel,可以配置为每隔一段时间就轮询一次,也可以配置让服务器在无数据时等待,直到有数据时才响应(长轮询)。轮询响应完成后后就结束连接。
采用streaming channel时,服务器的响应一直保持连接状态,这样服务器一次连接后,可以持续下发数据到客户端。由于HTTP连接不是双工的,所以一条AMF或HTTP通道实际上需要2条浏览器连接,分别用于上行和下行数据。这第二条连接仅在需要向服务器发送数据时才建立,之后立即释放。这种通道特别适合实时性高、客户端刷新的应用。比起轮询,这种模式有效减少了反复建立连接的开销。
IE和Firefox浏览器在每个session最大连接数上有些不同。如果因此导致streaming channel建立失败,则BlazeDS会自动使用messaging-config.xml配置的下一个连接。
实例:定义多个默认通道,作为备份。
String clientID = UUIDUtils.createUUID();
int i = 0;
while (running) {
Tick tick = new Tick();
tick.setAskPrice(new BigDecimal("100"));
tick.setBidPrice(new BigDecimal("100"));
tick.setMidPrice(new BigDecimal("100"));
tick.setTickTime(new Date());
System.out.println(i);
msg.setDestination("tick-data-feed");
msg.setHeader("DSSubtopic", "tick");
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(tick);
msgBroker.routeMessageToService(msg, null);
i++;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
}
<mx:Consumer id="consumer" destination="chat" message="messageHandler(event.message)" selector="prop1 = 10"/>
<mx:Script>
<!--[CDATA[
import mx.messaging.messages.AsyncMessage;
import mx.messaging.messages.IMessage;
private function send():void
{
var message:IMessage = new AsyncMessage();
message.headers = new Array();
message.headers["prop1"] = 10;
message.body.chatMessage = msg.text;
producer.send(message);
msg.text = "";
}
private function messageHandler(message:IMessage):void
{
log.text += message.body.chatMessage + "\n";
}
]]-->
</mx:Script>
<destination id="chat"/>
consumer.destination = "tick-data-feed";
consumer.subtopic = "tick";
consumer.channelSet = new ChannelSet(["my-streaming-amf"]);
consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
consumer.subscribe();
var consumer:Consumer = new Consumer();
consumer.destination = "feed";
consumer.subtopic = "tick";
var channelSet:ChannelSet = new ChannelSet();
channelSet.addChannel(myStreamingAMF);
consumer.channelSet = channelSet;
consumer.selector="userName=fortest";
consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
consumer.subscribe();
map.put("userName", "fortest");
msg.setDestination("feed");
msg.setHeader("DSSubtopic", "tick");
msg.setHeaders(map);
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
msg.setBody(i+" ");
msgBroker.routeMessageToService(msg, null);
var consumer:Consumer = new Consumer();
consumer.destination = "feed";
consumer.subtopic = "tick";
var channelSet:ChannelSet = new ChannelSet();
channelSet.addChannel(myStreamingAMF);
consumer.channelSet = channelSet;
consumer.selector="userName=fortest";
consumer.addEventListener(MessageEvent.MESSAGE, messageHandler);
consumer.subscribe();
<properties>
<server>
<allow-subtopics>true</allow-subtopics>
<subtopic-separator>.</subtopic-separator>
</server>
</properties>
<channels>
<channel ref="my-polling-amf" />
<channel ref="my-streaming-amf" />
</channels>
</destination>
<endpoint url="http://{server.name}:{server.port}/{context.root}/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="8"/>
</user-agent-settings>
</properties>
</channel-definition>
msg.setDestination("feed");
msg.setHeader("DSSubtopic", "tick");
msg.setClientId(clientID);
msg.setMessageId(UUIDUtils.createUUID());
msg.setTimestamp(System.currentTimeMillis());
msg.setBody("" + i);
msgBroker.routeMessageToService(msg, null);
private function messageHandler(event:MessageEvent):void
{
tick = event.message.body as String;
txtTick.text = txtTick.text + tick;
}
发表评论
-
图片遮罩
2011-11-25 18:03 1160<mx:Canvas width="10 ... -
Flex:使用ArrayCollection过滤Tree
2011-11-16 14:22 1426Flex中的 Tree 是很难被过滤的,因为它们包 ... -
datagrid中滚动条问题
2011-11-14 18:26 3677经常有人在看了前面写的《Flex实现多文 ... -
flex 弹出菜单
2011-11-04 14:38 1223<?xml version="1.0" ... -
AIR管理文件关联, 指定文件默认打开方式
2011-10-30 17:50 2307参考:http://help.adobe.com/zh_CN/ ... -
在messaging服务中的服务端的一些属性的说明
2011-10-27 03:29 1117Subscription-timeout-minutes:在这 ... -
Flex事件冒泡机制
2011-09-28 23:22 2761在网上浏览了几篇文章,大体总结了一下,简单说明如下: 事 ... -
Adobe Flex迷你教程 -- 合理使用Module分割项目以及对Module的使用
2011-09-26 15:27 1051现在说说Module,这篇教程代码不是最重要的,怎么样合理的使 ... -
12条有用的Flex代码
2011-09-19 21:46 10461.复制内容到系统剪贴板 System.setClipbo ... -
Flex中的 for in 与 for each in
2011-09-12 19:07 1186for...in循环中的迭代变量是对象中的键名(Flex中 ... -
Flex AIR)创建“不规则形状”的Air透明窗体(二)--使用Flex SDK4.5.1
2011-09-10 15:53 2447在此之前,我曾写过一篇关于《创建“不规则形状”的Air透明 ... -
Flex Application 初始化顺序
2011-09-08 16:12 1463Flex应用程序共由两帧组成,第1帧为preloader部分, ... -
Adobe Flash Builder的强大功能--移动设备控制桌面Apps
2011-09-08 14:29 981这个视频中,Adobe平台技术经理Tomas Krcha将会给 ... -
利用AIR的ServerSocket类让 AIR 做socket服务器
2011-08-30 16:13 5855新的air sdk 新增了 ServerSocket类, ... -
Fms3和Flex打造在线多人视频会议和视频聊天(附原代码)<视频聊天,会议开发实例3>
2011-08-27 14:06 1743本篇是视频聊天,会议 ... -
Adobe AIR中使用Flex连接Sqlite数据库(2)(添加,删除,修改以及语句参数)
2011-08-27 13:59 1092本章主要总结数据库的插入,删除,修改,以及语句参数的使用本 ...
相关推荐
这涉及到事件驱动编程、反射机制以及设计模式的应用,例如观察者模式用于实现事件订阅和发布,以及工厂模式用于动态创建对象。通过研究源码,我们可以学习到如何构建灵活、可扩展的软件架构。 总之,"智能的C#脚本...
它是指在保持低成本的同时,根据消费者个性化需求进行产品定制,以满足市场的多样性。这要求企业能够快速响应市场变化,提供多样化的产品,同时控制好成本。 2. **多样化成本管理**:多样化成本包括库存、准备工作...
- **意义**:建立一个基于.NET框架的小说阅读网站,旨在为用户提供一个便捷、高效、个性化的在线阅读平台。一方面满足了用户多样化的阅读需求,另一方面也为作者提供了一个展示作品的舞台。 #### 2. 技术选型 - **...
例如,银行会根据客户的存款日平均余额、标准偏差等指标来评估其现有价值和潜在价值,从而确定优质客户并提供个性化服务。这样做不仅可以降低成本,提高收益,还能通过调整网点布局和服务渠道优化运营效率。 传媒...
同样,雅芳也进行了电子化转型,区分不同会员类型的权益,让直销代表能够进行线上订货和订单追踪,并提供在线咨询、电子报订阅等服务,以增强客户互动和忠诚度。 综上所述,电子商务在直销产业的应用不仅提高了运营...
由于关键业绩指标(KPIs)之间的冲突,如订阅者增长和每用户平均收入(ARPU),运营商需要区分“低价值”和“高价值”客户。识别这些客户成为了一个难题,因为不同的数据/语音系统以及预付和后付费系统使得对客户...
这一模式的兴起始于20世纪90年代中后期,随着信息技术的飞速发展,电子商务以其低成本、高效、互动和个性化的特性吸引了大量商家的关注。电子商务模式的多样性反映了企业在市场中的创新策略和竞争优势。 首先,我们...
这类系统通常具备多用户权限管理、内容审核、无限层级分类、自定义模板等功能,以满足不同用户的个性化需求。 首先,无限级分类是新闻发布系统的核心特性之一。这意味着用户可以创建任意多的分类,并且这些分类可以...
4. 云平台与大数据:通过云端处理和分析车辆产生的大量数据,优化算法,提供个性化服务,甚至实现远程控制和升级。 问题三:智能化汽车的发展挑战与前景如何? 1. 技术挑战:自动驾驶的安全性是首要问题,需要解决...
设计上,源码会包含模板引擎,用于自定义布局和样式,满足不同地区和行业的个性化需求。 2. **用户管理**:源码中应有用户注册、登录、修改个人信息的功能,同时需要考虑到安全性,如密码加密存储,防止数据泄露。...
还可以通过“效果选项”调整更多平滑设置,以实现更个性化的动画效果。 实时协同工作是Office 365订阅者另一项便利的功能。在共享演示文稿后,您可以看到其他合作者的实时编辑,知道他们在哪张幻灯片上工作以及正在...
3. **多站点支持**:laravel-trackable需要识别并区分来自不同站点的访问者。这可能涉及到设置一个自定义的域名解析系统,或者通过检查请求头中的信息(如Host字段)来确定当前请求属于哪个站点。 4. **访客跟踪**...
同时,系统可能还集成了用户注册、登录功能,以支持用户个性化订阅和评论互动。 安全性是任何Web应用都需要考虑的重要方面。Asp.Net 2.0 提供了内置的身份验证和授权机制,如Forms Authentication和Role-Based ...
这一章可能侧重于如何通过提供与众不同的产品和服务来区分自己,比如采用独特配方、使用特殊原料、推出定制化产品等,以满足不同消费者的个性化需求,从而在竞争激烈的市场中实现差异化竞争。 综上所述,番茄酱行业...
它包括客户价值主张(如提供个性化学习平台)、盈利模式(如订阅费或广告收入)、关键资源(如技术人才和数据)以及关键流程(如用户获取和保留机制)。 **六、财务分析** 未来的营收和费用预测展示了项目的经济...
最后,企业应实施差异化战略,通过提供与众不同的产品或服务,满足消费者的个性化需求,从而在市场中占据一席之地。这可能涉及到技术创新、服务创新或者商业模式创新,旨在打破同质化竞争,形成企业的核心竞争力。 ...
例如,可以开发针对特殊行业(如汽车维修、电力工程)的专业工具,或是推出个性化定制服务,满足不同消费者的具体需求。\n\n总结,通用手工具企业在未来五年内,要想在市场中脱颖而出,必须把握消费者需求,持续创新...
通过以上步骤,即使是对编程不熟悉的用户也能在Dreamweaver MX的帮助下,快速创建出个性化的博客。这个过程不仅提升了技术能力,还为个人表达和知识分享提供了广阔的舞台。所以,无论你是技术爱好者还是内容创作者,...
- **事件**: 是基于委托的,提供了一种机制来通知多个订阅者(事件处理器)某些操作已完成。事件通常用于响应用户界面动作或系统事件,是.NET中实现观察者模式的关键。 #### 5. Override与重载的区别 - **Override...