好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用SignalR实时显示淘宝买家信誉及中差评信息

使用SignalR实时显示淘宝买家信誉及中差评信息

使用SignalR实时显示淘宝买家信誉及中差评信息

 

 

注,本文使用开发环境:Visual Studio 2012.2,平台:ASP.NET MVC 4,数据库:本文未说明

一、啰嗦故事

接触SignalR已经很长一段时间了,不过也没用它写过什么像样的Demo。今天就与大家分享一个比较简单Demo,本文的重点在于如何使用SignalR。只是以一个实际的例子来说明一下。

Story:故事是的起因是这样地,淘宝卖家是个很可怜的职业,四处寻亲,但是,往往都会因为买家初来炸道,或者出于恶意,或者本身已经养成了中差评习惯而给卖家以中差评。

本身中差评对淘宝店的影响其实也不算小,所以如果能帮卖家避免,最好可以避免。

那么如何避免呢?

首先,卖家是可以自行查看的,但是对于订单量多的卖家来说,是有些辛苦吧,最好可以有个功能。一但有那些给过不良评价的买家来下单时,就立刻提示出来,叮咚~向着这个目标踏进吧。

这是我们的终极效果图,绿色的是马塞克,不要求无码图。

红色背景代表有过差评

黄色背景代表,有过中评或是新号

提示的消息会在买家下单后自动出现在列表的头部(当然是自动的,不需要刷新,要不本节讲SignalR就没意义了是不)

嗯,下面我们来看看如何实现这个主动通知吧

二、走起服务器端

先建立一个ASP.NET MVC项目,这里默认是ASP.NET MVC4 Razor引擎

我们先来建立一个Model,用于数据库存储也好,序列化后传递数据到界面也好,都离不开它。

    1:       [Table( "buyers" )]
    2:        public   class  DbBuyer
    3:       {
    4:            /// <summary> 
    5:            /// 自增Id 
    6:            /// </summary> 
    7:           [Column( "id" ), Key]
    8:            public   int  Id { get; set; }
    9:            /// <summary> 
   10:            /// 买家昵称 
   11:            /// </summary> 
   12:           [Column( "nick" )]
   13:            public   string  Nick { get; set; }
   14:            /// <summary> 
   15:            /// uid 
   16:            /// </summary> 
   17:           [Column( "buyer_uid" )]
   18:            public   string  BuyerUid { get; set; }
   19:            /// <summary> 
   20:            /// 买家信誉 
   21:            /// </summary> 
   22:           [Column( "buyer_rate" )]
   23:            public   int  RateCount { get; set; }
   24:            /// <summary> 
   25:            /// 给出过的中评 
   26:            /// </summary> 
   27:           [Column( "send_mid" )]
   28:            public   int  SendMid { get; set; }
   29:            /// <summary> 
   30:            /// 给出过的差评 
   31:            /// </summary> 
   32:           [Column( "send_bad" )]
   33:            public   int  SendBad { get; set; }
   34:            /// <summary> 
   35:            /// 半年内评价 
   36:            /// </summary> 
   37:           [Column( "half_year_count" )]
   38:            public   int  HalfYearCount { get; set; }
   39:            /// <summary> 
   40:            /// 上个月评价 
   41:            /// </summary> 
   42:           [Column( "last_month_count" )]
   43:            public   int  LastMonthCount { get; set; }
   44:           [Column( "add_time" )]
   45:            public  DateTime AddTime { get; set; }
   46:       }

下面进入SignalR正题

引用一个NuGet的包:Microsoft ASP.NET SignalR

然后我们就能看到引入了一些DLL和JS。

我们先建立一个Hub,就叫BuyerHub,如果你没有模板。。。那就自己建个CS类吧(此模板应该内置于2012.2版本中下载见 www.visualstudio.com )

    1:     [HubName( "buyer" )]
    2:        public   class  BuyerHub:Hub
    3:       {
    4:            private   const   int  TakeCount = 20;
    5:    
    6:            public  List<DbBuyer> GetNeastBuyerInfo()
    7:           {
    8:                using  (var db =  new  Entities()) //Ef code first 
    9:               {
   10:                    //读取最新的买家信息...这个数据从哪来...嗯..无所谓了,自己编吧,或者自己写程序去获取吧 
   11:                   var list= db.DbBuyers.OrderByDescending(c => c.AddTime).Take(TakeCount)
   12:                       .OrderBy(c=>c.Id).ToList();
   13:                    return  list;
   14:               }
   15:           }
   16:       }

三、View页面

下面我们建立一个页面Index(ASP.NET MVC,Controller我取名叫做AlertController,Razor View)

使用默认Layout(会引用jQuery)

这里我们编辑Index.cshtml内容如下

    1:   @model dynamic
    2:    
    3:    <  div   id  ="shower"  >     
    4:    </  div  > 
    5:    
    6:   @section scripts{
    7:        <  script   src  ="bundles/jquerycolor"  ></  script  > 
    8:       <script src= "Scripts/jquery.signalR-1.0.1.js" ></script>
    9:       <script src= "signalr/hubs" ></script>
   10:       <script type= "text/javascript"  src= "@Url.Content(" ~/Scripts/SignalR/BuyerHub.js ")" > </  script  > 
   11:   }

其中~/Scripts/SignalR/BuyerHub.js是我们自己建的js,我们下面来看看这个js我们怎么编写才能让这个SignalR运行起来

    1:    
    2:   $( function  () {
    3:        var  hub = $.connection.buyer;
    4:        function  init() {
    5:            return  hub.server.getNeastBuyerInfo().done( function  (buyers) {
    6:                //从BuyerHub获取buyer数组,就是这里的参数 
    7:                //遍历显示,如果现在列表中不包含,则插入到第一条 
    8:                var  div = $( "#shower" );
    9:               $.each(buyers,  function  (index, item) {
   10:                    if  ($( "div[data-nick='"  + item.Nick +  "']" , div).length)  return ; //列表中已经存在则漂过 
   11:                    var  x = $( "<div>" ).attr( "data-nick" , item.Nick).html(
   12:                        "<span style='display:inline-block;200px'>"  + item.Nick +  "</span>   <span class='label label-success'>信誉:"  +
   13:                           item.RateCount +
   14:                            " </span><span class='label label-warning'>中评:"  + item.SendMid +
   15:                            " </span><span class='label label-error'>差评:"  + item.SendBad +
   16:                            " </span><span class='label label-important'>上月:"  + item.LastMonthCount +
   17:                            " </span><span class='label label-info'>半年:"  + item.HalfYearCount+ "</span>" );
   18:                    if  (item.SendMid > 0 || item.RateCount==0) x.css( "background" ,  "yellow" ); //设置中差评效果  
   19:                    if  (item.SendBad > 0) x.css( "background" ,  "red" );
   20:                   div.prepend(x);
   21:               });
   22:           });
   23:       }
   24:       $.extend(hub.client, {
   25:           updateInfo:  function  () { //为client创建一个方法updateInfo一会会用到 
   26:                return  init();
   27:           }
   28:       });
   29:       $.connection.hub.start().pipe(init); //开启客户端SignalR,并首次运行init 
   30:   });

好的,这样就完了成显示信息的过程,但是如果有新数据插入数据库,我们怎么才能得知呢,最简单的就是在插入数据库的时候主动通知一下,我们假设这个通知是通过Web的,于是我们可以去写一个Action去接受通知。

我们在AlertController中建立一个Sync的Action,当用户访问时,就会通知所有客户端触发 updateInfo方法

    1:            public  ActionResult Sync( string  nick)
    2:           {
    3:               GlobalHost.ConnectionManager.GetHubContext<BuyerHub>().Clients.All.updateInfo();
    4:                return  Content( "" );
    5:           }

en,于是。。。就完成了

我们回头来总结一下一个SignalR的几个重要组成

1.Hub,用于提供数据

2.一个页面,用于展示数据

3.一个JavaScript用于建立Client,并运行WebSocket或轮询

4.如果有需要还需要一个服务器端的触发功能

四、其它

SignalR官方网址:  http://www.asp.net/signalr

开源项目: https://github.com/SignalR/SignalR

未来版本 : http://aspnetwebstack.codeplex.com

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于使用SignalR实时显示淘宝买家信誉及中差评信息的详细内容...

  阅读:45次