基于Silverlight + WCF设计实现汽车实时数据监控

 

      最近团队有一些小的变动,项目比较忙比较来这溜达。 今天休息抽空在原汽车动画的基础上做了个实时监控的功能DEMO分享给大家。先来个图有图有真相:

汽车监控示例图

      演示地址: http://xingjunli.webs.com/SilverlightCar.html

 

需求提出:假定要从服务器获取当前汽车运行参数信息返回给客户端显示,实现一个汽车实时数据监控的功能;

  方案一:

     在页面实现一个定时器,定时向服务器发出请求,将返回数据更新致页面显示(当然Silverlight的双向通讯功能也可实现同样的功能,不过代码其逻辑相对复杂,调试及保持其稳定性稍有挑战),这种方式对服务器而言压力比较大,客户端服务重用性也打了折扣;

   方案二:

    通过客户端事件监控器,从客户端主动发送请求,实时访问服务;通过事件预定的方式向客户端发送数据;同时根据服务器负载能力定义一个可配置的(Interval)参数;并通过一个客户端缓存来判断数据是否更新、并通知客户程序更新;静态图如下:

实时监控静态类图

客户端实现:

      1、  IObserver:实现观察者监控器,根据用户注册的事件,响应客户端事件更新;

      2、  EventMonitor:实现具体的业务,同服务器交互;

      3、  ClientSnapShot:客户端缓存,用于保存判断数据是否有修改更新

服务空器端实现:

      1、  CarInfoServer:服务器业务信息,获取汽车运行实时参数(对外实现数据查询服务,本身并不主动提交)

      2、  CarInfoRegistry:服务器缓存,模拟定时更新汽车运行实时数据

 

方案二优点:

     1、  为客户端应用带来更大自由度,借助事件监听器控制自己想要访问的内容,一个服务可监控一系列注册的事件,或者向多个服务发起数据请求,实现动态的插拔;

     2、  有一些服务是外部开发的,要实现主动提交信息、集成比较困难,借助一个中间件来整合更方便、可行性更高,中间件也能更好的监控相关服务的运行和使用情况;

     3、  如果客户端响应相同事件的客户程序较多时,能有效的减轻服务器负担;

 

 

实现代码:

服务器端:

   数据实体:

  

   

  

  

  

客户端(客户需添加CarInfoServer的web引用):

   

   

   

    

 Silverlight实时仪表实现:

  仪表XAML:

    

  仪表后台代码:

  

  主页面事件注册:

 

  

 

结束语:事件监控器通过对访问WCF的事件进行包装,通过轮循的方式定时请求数据,并不是真正的实时监控,而数据请求的频率、客户端数量、服务器负载能力,都要求我们必须可控,如果过于频繁可能会压垮服务器。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值