• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > Asp.net SignalR快速入门

Asp.net SignalR快速入门

作者:Learning hard 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Learning hard通过本文主要向大家介绍了c asp.net 入门,asp net入门,asp.net,asp net培训,asp和asp.net的区别等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

今天的专题就是让大家可以快速的上手Asp.net SignalR。废话不多说了,下面正式进入今天专题的内容。

二、Asp.net SignalR 是个什么东东
   Asp.net SignalR是微软为实现实时通信的一个类库。一般情况下,SignalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务器通信,随着Html5中WebSockets出现,SignalR也支持WebSockets通信。另外SignalR开发的程序不仅仅限制于宿主在IIS中,也可以宿主在任何应用程序,包括控制台,客户端程序和Windows服务等,另外还支持Mono,这意味着它可以实现跨平台部署在Linux环境下。

  SignalR内部有两类对象:

Http持久连接(Persisten Connection)对象:用来解决长时间连接的功能。还可以由客户端主动向服务器要求数据,而服务器端不需要实现太多细节,只需要处理PersistentConnection 内所提供的五个事件:OnConnected, OnReconnected, OnReceived, OnError 和 OnDisconnect 即可。
Hub(集线器)对象:用来解决实时(realtime)信息交换的功能,服务端可以利用URL来注册一个或多个Hub,只要连接到这个Hub,就能与所有的客户端共享发送到服务器上的信息,同时服务端可以调用客户端的脚本。
  SignalR将整个信息的交换封装起来,客户端和服务器都是使用JSON来沟通的,在服务端声明的所有Hub信息,都会生成JavaScript输出到客户端,.NET则依赖Proxy来生成代理对象,而Proxy的内部则是将JSON转换成对象。

  客户端和服务端的具体交互情况如下图所示:

  从上面的介绍可以看出,SignalR既然是为实时而生的,这样就决定了其使用场所。具体适用情景有如下几点:

1、聊天室,如在线客服系统,IM系统等
2、股票价格实时更新
3、消息的推送服务
4、游戏中人物位置的实时推送
   目前,我所在公司在开发的就是在线客服系统。

三、使用Asp.net SignalR在Web端实现广播消息
   通过第二部分的介绍,相信大家对Asp.net SignalR有了一个初步的了解,接下来通过两个例子来让大家加深对SignalR运行机制的理解。第一个例子就是在Web端如何使用SignalR来实现广播消息。

使用Visual Studio 2013,创建一个MVC工程
通过Nuget安装SignalR包。右键引用-》选择管理Nuget程序包-》在出现的窗口中输入SignalR来找到SignalR包进行安装。
安装SignalR成功后,SignalR库的脚本将被添加进Scripts文件夹下。具体如下图所示:


4. 向项目中添加一个SignalR集线器(v2)并命名为ServerHub。

  5. 将下面代码填充到刚刚创建的ServerHub类中。

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;

namespace SignalRQuickStart
{public class ServerHub : Hub
  {
    private static readonly char[] Constant =
    {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
      'w', 'x', 'y', 'z',
      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'W', 'X', 'Y', 'Z'
    };

    /// <summary>
    /// 供客户端调用的服务器端代码
    /// </summary>
    /// <param name="message"></param>
    public void Send(string message)
    {
      var name = GenerateRandomName(4);

      // 调用所有客户端的sendMessage方法
      Clients.All.sendMessage(name, message);
    }

    /// <summary>
    /// 产生随机用户名函数
    /// </summary>
    /// <param name="length">用户名长度</param>
    /// <returns></returns>
    public static string GenerateRandomName(int length)
    {
      var newRandom = new System.Text.StringBuilder(62);
      var rd = new Random();
      for (var i = 0; i < length; i++)
      {
        newRandom.Append(Constant[rd.Next(62)]);
      }
      return newRandom.ToString();
    }
  }
}

</div>

  6. 创建一个Startup类,如果开始创建MVC项目的时候没有更改身份验证的话,这个类会默认添加的,如果已有就不需要重复添加了。按照如下代码更新Startup类。

  7. 在Home控制器中创建一个Home Action方法

public class HomeController : Controller
  {
    public ActionResult Index()
    {
      return View();
    }

    public ActionResult About()
    {
      ViewBag.Message = "Your application description page.";

      return View();
    }

    public ActionResult Contact()
    {
      ViewBag.Message = "Your contact page.";

      return View();
    }

    public ActionResult Chat()
    {
      return View();
    }
  }

</div>

  8. 在Views文件中Home文件夹中创建一个Chat视图,视图代码如下所示:

@{
  ViewBag.Title = "聊天窗口";
}

<h2>Chat</h2>

<div class="container">
  <input type="text" id="message" />
  <input type="button" id="sendmessage" value="Send" />
  <input type="hidden" id="displayname" />
  <ul id="discussion"></ul>
</div>

@section scripts
{
  <!--引用SignalR库. -->
  <script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
   <!--引用自动生成的SignalR 集线器(Hub)脚本.在运行的时候在浏览器的Source下可看到 -->
  <script src="~/signalr/hubs"></script>
  
  <script>
    $(function () {
      // 引用自动生成的集线器代理
      var chat = $.connection.serverHub;
      // 定义服务器端调用的客户端sendMessage来显示新消息
      
      chat.client.sendMessage = function (name, message) {
        // 向页面添加消息
        $('#discussion').append('<li><strong>' + htmlEncode(name)
          + '</strong>: ' + htmlEncode(message) + '</li>');
      };
      
      // 设置焦点到输入框
      $('#message').focus();
      // 开始连接服务器
      $.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
          // 调用服务器端集线器的Send方法
          chat.server.send($('#message').val());
          // 清空输入框信息并获取焦点
          $('#message').val('').focus();
        });
      });
    });
    
    // 为显示的消息进行Html编码
    function htmlEncode(value) {
      var encodedValue = $('<div />').text(value).html();
      return encodedValue;
    }
  </script>
  }

</div>

  9. 修改App_Start文件夹内的RoutConfig类,将Action方法默认设置为Chat.

public class RouteConfig
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Chat", id = UrlParameter.Optional }
      );
    }
  }
</div>

  到此,我们的例子就实现完成了,接下来我们先来看看运行效果,之后再来解释到底SignalR是如何来完成广播消息的。运行的运行结果如下。

  从运行结果,你可以发现,在任何一个窗口输入信息并发送,所有客户端将收到该消息。这样的效果在实际应用中很多,如QQ,一登录QQ的时候都会推送腾讯广告消息。

  看完了运行结果,接下来我们来分析下代码,进而来剖析下SignalR到底是如何工作的。

  按照B/S模式来看,运行程序的时候,Web页面

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET中的C#基础知识
  • asp.net(C#)实现功能强大的时间日期处理类完整实例
  • asp.net(C#)使用QRCode生成图片中心加Logo或图像的二维码实例
  • ASP.NET(C#) Web Api通过文件流下载文件的实例
  • Asp.net(C#)读取数据库并生成JS文件制作首页图片切换效果(附demo源码下载)
  • 总结ASP.NET C#中经常用到的13个JS脚本代码
  • Asp.net SignalR快速入门
  • asp.net实现C#绘制太极图的方法
  • asp.net中C#实现手动回收内存的方法
  • asp.net中c#自定义事件的实现方法详解

相关文章

  • 2017-05-11ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
  • 2017-05-11ASP.NET中日历控件和JS版日历控件的使用方法(第5节)
  • 2018-08-20JWT + ASP.NET MVC时间戳防止重放攻击详解
  • 2017-05-11使CheckBoxList的Attributes属性生效(修改微软的一个bug)
  • 2018-08-20详解Spring Boot 中使用 Java API 调用 lucene
  • 2017-05-11Asp.net中时间格式化的6种方法详细总结
  • 2017-05-11Coolite Cool Study 2 同时更新多个Tab
  • 2017-05-11ajax.net +jquery 无刷新三级联动的实例代码
  • 2017-05-11discuz nt的退出实现代码
  • 2017-05-11ASP.NET中实现Form表单字段值自动填充到操作模型中

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Asp.Net、asp实现的搜索引擎网址收录检查程序
    • Visual Studio.Net 内幕(6)
    • ASP.NET中各个后缀名的含义介绍
    • ASP.Net获取客户端网卡MAC的小例子
    • ASP.NET MVC+EF框架+EasyUI实现权限管系列
    • Ajax+asp.net智能匹配检索(含图含完整代码)
    • Asp.net MVC中Razor常见的问题与解决方法总结
    • asp.net 多文件上传,兼容IE6/7/8,提供完整代码下载
    • ASP.NET MVC异常处理模块详解
    • 通过剪贴板实现将DataGridView中的数据导出到Excel

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有