`
pcajax
  • 浏览: 2162363 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SignalR介绍与Asp.net

 
阅读更多


     SignalR 是一个asp.net异步库,它提供广播消息到多个client端的机制。 SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在线预订系统,股票交易等实时应用。这可以显著降低服务器的负载确保没有不必要的请求从重复客户端请求。 SignalR是非微软的正式开源项目。 
它实现了Long Polling的模式,可看下面图示: 

longPolling

传统的 AJAX 应用不同之处在于:

1. 服务器端会阻塞请求直到有数据传递或超时才返回。 
2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。 
3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

   
下面我们来通过一个简单的小例,首先通过NuGet安装它:

Install-Package SignalR

在Server端,创建一个MyChat的Class继承自SignalR.Hubs.Hub类 : 

    public class MyChat : Hub
    {
        /// <summary>
        /// Sends the specified message.
        /// </summary>
        /// <param name="message">The message.</param>
        public void Send(string message)
        {
            // Call the addMessage method on all clients         
            Clients.addMessage(message);
        }
    }


现在来看前端页面,引用相应的客户端Js脚本,创建连接,绑定事件。 

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>dev home</title>
</head>
<body>
    <script src="../Scripts/jquery-1.7.2.js"></script>
    <script src="../Scripts/jquery.signalR-0.5.2.js"></script>
    <script src="/signalr/hubs" type="text/javascript"></script>
    <div>
        <script type="text/javascript">
            var chat;
            $(function () {
                // Created proxy            
                chat = $.connection.myChat;
                // Assign a function to be called by the server        
                chat.addMessage = onAddMessage;
                // Register a function with the button click               
                $("#broadcast").click(onBroadcast);
                // Start the connection        
                $.connection.hub.start();
            });
            function onAddMessage(message) {
                // Add the message to the list         
                $('#messages').append('<li>' + message + '</li>');
            }
            function onBroadcast() {
                // Call the chat method on the server           
                chat.send($('#message').val());
            }       
        </script>
        <input type="text" id="message" />
        <input type="button" id="broadcast" value="send" />
        <ul id="messages">
        </ul>
    </div>
</body>
</html>


运行后,我们可以看到每次点击Button就会把当前的信息广播到所有客户端。 使用Fiddler 结果是,当我们提交cc字符串的Request RAW: 

POST http://localhost:17347/signalr/send?transport=longPolling&connectionId=8eaf7e6b-f0e9-414a-8e97-68ad7ff02e2b HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost:17347/mytest/MyChat.html
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: localhost:17347
Content-Length: 131
Connection: Keep-Alive
Pragma: no-cache

data=%7B%22hub%22%3A%22MyChat%22%2C%22method%22%3A%22Send%22%2C%22args%22%3A%5B%22cc%22%5D%2C%22state%22%3A%7B%7D%2C%22id%22%3A1%7D

 

Response RAW:

 

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 19 Jul 2012 03:12:28 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: application/json
Connection: Close
Content-Length: 66

{"State":{},"Result":null,"Id":"1","Error":null,"StackTrace":null}
 
然后从Fiddler中看第3个会话显示HTTP一直在保持连接, 上面文本是其中第2个会话的RAW. 

IEfiddle
 
基于Long Polling,客户端发出的请求到服务器端没有回复,直到有数据返回。 Web客户端保留挂起状态只有等到服务器返回一些有效的响应才关闭连接。这正是今天我们想要的 --— 潜在减轻的 Web 服务器的压力。 
分享到:
评论

相关推荐

    微软开源的SignalR .Net客户端实现ASP.NET SignalR.zip

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

    .NET6API-Vue使用SignalR文档教程

    总结,本教程详细介绍了如何在`.NET6 API`和`Vue`应用中集成 SignalR,包括引入 SignalR 服务、编写 Hub、配置路由、处理跨域以及在 Vue 客户端建立连接和发送/接收消息。遵循这些步骤,你就可以创建一个实时通信的...

    基于ASP.NETSignalR的实时Web功能的实现

    ASP.NET SignalR是一种用于构建实时Web应用程序的强大框架,由微软开发并支持,它极大地简化了服务器到客户端的数据推送过程,从而实现了双向通信。SignalR利用多种传输方式(如WebSocket、Server-Sent Events、Long...

    asp.net mvc版本Signalr即时通讯完整源码

    ASP.NET MVC与SignalR结合,提供了以下关键知识点: 1. **SignalR概念**:SignalR主要由Hubs、Connections、Groups和Transports组成。Hubs是最常用的方式,它允许服务器直接调用客户端的方法,实现双向通信。...

    Asp.net SignalR通知指定用户

    **Asp.net SignalR通知指定用户** 在ASP.NET框架中,SignalR是一个强大的实时通信库,它使得服务器向客户端实时推送数据变得简单高效。SignalR支持多种浏览器和服务器平台,包括.NET Framework和.NET Core,以及...

    ASP.NET Core项目实战视频教程--基于ASP.NET Core x SignalR实现的实时在线聊天应用程序

    ChatApp项目的视频版本

    asp.netCore+vue +SignalR

    在Vue应用中,我们可以使用官方提供的`@microsoft/signalr`库来建立与ASP.NET Core SignalR服务的连接。在Vue组件中,初始化连接,订阅服务器端的方法,并定义发送消息的函数。Vue的响应式系统可以与SignalR完美结合...

    SignalR Programming in Microsoft ASP.NET(MS,2014)

    Get definitive guidance on SignalR, a new library for ASP.NET developers that simplifies the process of adding real-time web functionality to your applications. Real-time web functionality enables ...

    asp.net MVC5+SignalR(消息推送)

    ASP.NET MVC5与SignalR是两种强大的Web开发技术,它们结合使用可以实现高效、实时的双向通信,非常适合构建实时更新的应用,比如聊天室、协作工具或者实时数据分析平台。在这个项目中,开发者使用ASP.NET MVC5作为...

    基于.Net Core3.1 与signalR实现一个即时通讯工具-源码

    SignalR 是一个用于 ASP.NET 的库,它简化了开发者在 Web 应用程序中实现实时双向通信的过程,使得服务器可以将数据推送到客户端,而不仅仅是响应客户端的请求。 首先,让我们理解.NET Core 3.1。.NET Core 是微软...

    SignalRCoreWebRTC:使用信令服务器作为 SignalR Core 与 ASP.NET Core 3.1 和 WebRTC 进行一对一音频呼叫

    SignalRCoreWebRTC 使用信令服务器作为 SignalR Core 与 ASP.NET Core 3.1 和 WebRTC 进行一对一音频呼叫 在 Chrome、Edge、Opera 中测试

    ASP.NET MVC SignalR 源码示例

    2. **安装与配置**:在ASP.NET MVC项目中使用SignalR,首先需要通过NuGet包管理器安装`Microsoft.AspNet.SignalR`包。然后,在Global.asax.cs文件的Application_Start方法中注册SignalR路由。 3. **创建Hub类**:...

    ASP.NET用SignalR建立浏览器和服务器的持久连接详解

    ASP.NET用SignalR建立浏览器和服务器的持久连接详解

    ASP.Net core 6.0

    ASP.NET Core 6.0 介绍和应用概述 ASP.NET Core 6.0 是一个跨平台的、开源的、模块化的 Web 框架,由 Microsoft 开发。它提供了一个灵活的、可扩展的框架来构建 Web 应用程序。 ASP.NET Core 6.0 支持多种开发模式...

    azure-signalr:适用于.NET的Azure SignalR Service SDK

    NET的Azure SignalR服务SDK 适用于.NET的Azure SignalR Service SDK可帮助您利用可伸缩的云计算资源,利用实时消息... 您可以使用该软件包通过Azure SignalR Service直接管理ASP.NET Core SignalR客户端 .NET标准2.0

    SignalR Programming in Microsoft ASP.NET

    Get definitive guidance on SignalR, a new library for ASP.NET developers that simplifies the process of adding real-time web functionality to your applications. Real-time web functionality enables ...

    asp.net mvc版本Signalr即时通讯完整Demo

    综上所述,"asp.net mvc 版本 Signalr 即时通讯完整 Demo" 提供了一个全面的学习资源,涵盖了 SignalR 与 ASP.NET MVC 的整合、C# 编程以及实时通信的实践,对于希望掌握 Web 实时通信技术的开发者来说,这是一个...

    ASP.NET SignalR 消息推送例子

    SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中。 winform 和 Asp.net 通信

    ASP.NET 长连接做得在线聊天例子

    ASP.NET支持多种实现长连接的方式,如ASP.NET SignalR和WebSocket。 二、ASP.NET SignalR SignalR是ASP.NET的一个库,专为实时Web应用程序设计,它可以轻松地处理服务器到客户端的推送更新。SignalR提供了简单易用...

Global site tag (gtag.js) - Google Analytics