SignalR详解

一、什么是SingalR?

  SingalR是一种能够让客户端和服务端实时通信,服务端可以主动推送消息到客户端的技术以往的十几年里,客户端要想实时与服务器通信,只有通过长轮询和AJAX,服务器永远是被动的。

二、SingalR是怎么实现的?

  首先SignalR提供客户端和服务端之间的持久连接,其次在SignalR中,服务端代码使用远程过程调用(RPC)调用浏览器中的客户端代码,而不是请求-响应模式。
在这里插入图片描述
  如果是双向通信客户端通过RPC调用服务端的同名的方法,服务端更新数据后调用客户端的同名方法,客户端收到数据后进行显示

  如果是消息推送服务端通过RPC调用客户端同名方法,客户端收到数据后显示即可。

三、一个实例解析SignalR

namespace SignalRDemo
{
    [HubName("rateHub")]
    public class RateHub : Hub
    {
        //don't do this in real project
        private static int _rating;
 
        public void Rate()
        {
            _rating += 1;
            Clients.All.rateUpdate(_rating);
        }
    }
}

  当html页面触发Rate()方法时(客户端调用服务端的代码),调用所有客户端的rateUpdate()方法(服务端调用客户端的代码),将结果推送到客户端。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Rating</title>
</head>
<body>
    <h2>Please rate</h2>
    <input type="button" id="vote" value="Good (0)" />

    <script src="Scripts/jquery-1.6.4.js"></script>
    <script src="Scripts/jquery.signalR-2.2.0.js"></script>

    <script type="text/javascript">
        $(function () {
            var con = $.hubConnection();
             
            var hub = con.createHubProxy("rateHub");
            
            hub.on('rateUpdate', function (count) {
                $('#vote').val("Good (" + count + ")");
            });

            con.start().done(function () {
                $('#vote').click(function () {
                    hub.invoke("Rate");
                });
            });
        });
    </script>
</body>
</html>

  先声明一个连接,然后创建一个Hub:createHubProxy("rateHub")中使用的就是Hub的名字(HubName)。接下来添加rateUpdate事件处理,即更新点赞数(rateUpdate被服务器端的Hub调用)。最后启动Hub,添加点赞按钮的事件处理(调用服务器端的Hub的Rate方法)。

参考:https://www.cnblogs.com/everylittlebit/p/5351623.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值