Asp.Net MVC 中使用 SignalR

案例

安装

PM> Install-Package Microsoft.AspNet.SignalR -Version 2.4.3

新建集线器(Hub)的类

/// <summary>
/// 留言 Hub
/// </summary>
[HubName("leavingMessageHub")]
public class LeavingMessageHub : Hub
{

    public void PushCount()
    {
        int count = 12;
        Clients.All.pushCount(count);
    }
}

可以通过 HubName 特性标注外部访问的名称。

Startup 映射集线器

创建 Startup 类,将 SignalR 集线器映射到 app builder 管道中的“/signalr”,按照如下代码更新Startup类:

using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(DecGroup.Website.Startup))]
namespace DecGroup.Website
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR();  // 默认映射到“/signalr”
            // app.MapSignalR("/signala", new HubConfiguration());  // 可以不映射到“/signalr”
        }
    }
}

JavaScript 代码

<script src="~/Statics/lib/signalr/jquery.signalR-2.4.3.min.js"></script>
<script src="~/signalr/hubs"></script>
<script type="text/javascript">
    $(function () {
        initLeavingMessageHub();
    })

    function initLeavingMessageHub() {
        $.connection.hub.url = '/signalr';

        // 引用定义的集线器
        var hub = $.connection.leavingMessageHub;

        // 定义 client 端的javascript function,供 server 端 hub 通过 dynamic 的方式,调用所有 Clients 的 javascript function
        hub.client.getCount = function (count) {
            $("#right-number").text(count);  // 向页面添加消息
        };

        // 开始连接服务器
        $.connection.hub.start().done(function () {
            // 调用服务器端集线器的 pushCount 方法
            hub.server.pushCount();
            // 可以做一些其他的页面处理
        });
    }
</script>

消息推送

[HttpPost]
public async Task<JsonResult> Add()
{
    int count = 0;  // 获取数量
    var hub = GlobalHost.ConnectionManager.GetHubContext<LeavingMessageHub>();
    hub.Clients.All.getCount(count);  // 调用客户端方法,把 count 推送到客户端

    return Json(null);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qanx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值