Born to be proud
12/4
2016

SignalR框架

ASP .NET SignalR 是为 ASP .NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程。实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。

前端 JS 需要引入,且 /signalr/hubs 必须在 /Scripts/jquery.signalR-2.1.0.js 之后引入

<!--Reference the jQuery library. -->
<script src="/Scripts/jquery-1.10.2.min.js" ></script>
<!--Reference the SignalR library. -->
<script src="/Scripts/jquery.signalR-2.1.0.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>

该框架通过 Hub 实例与客户端建立连接,一个 Hub 实例对应一个连接。在Hub中声明的方法,前端JS可直接进行调用,完成与服务器的交互。服务端也可直接调用客户端方法。

namespace CMD.Controllers
{
    [HubName("sRadarHub")]     //前端js通过此名称调用
    public class SingleRadarHub:Hub
    {
         private readonly SingleRadar _sRadar;

         public SingleRadarHub() : this(SingleRadar.Instance) { }

         public SingleRadarHub(SingleRadar sRadar)
        {
            _sRadar = sRadar;
        }

        public DataOfSingleRadar GetAllDatas()
        {
            return _sRadar.GetAllDatas();
        }
    }
}

客户端调用服务端方法

$(document).ready(function(){


    //SignalR连接建立--jackieliu  2016.10.04  
    var rHub = $.connection.sRadarHub;   //拿到连接


    function init() {//建立连接成功后走的代码
        rHub.server.getAllDatas().done(function (datas){//调用服务器端getAllDatas()方法,返回的数据类型为DataOfSingleRadar

           //开始数据处理

    }


    rHub.client.clientUpdateDatas = function (newdata) {
        //更新数据方法,供服务端调用   
        //newdata为服务端调用时的参数,包含数据信息

        //处理代码省略,对newdata进行解析显示即可

    }


    $.connection.hub.start().done(init);


});

服务端调用客户端方法

private IHubConnectionContext<dynamic> Clients
{
    get;
    set;
}

private void BroadcastDatas(DataOfSingleRadar datas)
{
    Clients.All.clientUpdateDatas(datas);   //clientUpdateDatas是客户端声明的方法
}