全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

ASP.NET MVC中SignalR的简单应用

一、简介

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

  首先ASP.NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。让客户端(Web页面)和服务器端可以互相通知消息及调用方法。

  SignalR自动处理连接管理,可以让服务端同时向所有连接的客户端广播消息,比如聊天室。也可以向特定的客户端发送消息。客户端和服务器之间的连接是持久的,与传统的HTTP连接不同,它是为每个通信重新建立的。

  SignalR支持“服务器推送”功能,其中服务器代码可以使用远程过程调用(RPC)调用浏览器中的客户端代码,而不是今天在网络上常见的请求响应模型。

  总之,SignalR是一个运行在.NET 平台上的 html websocket 框架,它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面

  注意:WebSocket要求服务器使用Windows Server 2012或Windows 8和.NET Framework 4.5如果不符合这些要求,SignalR将尝试使用其他传输来进行连接

二、安装

打开管理NuGet程序包,搜索SignalR,安装下面这些程序包


安装完成后程序中会多出一些引用

三、编写代码

因为用的是SignalR2,所以需要新建Startup.cs类,配置集线器,编写如下

using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRStartup.Startup))]
namespace SignalRStartup
{
  public class Startup
  {
    public void Configuration(IAppBuilder app)
    {
      // 配置集线器 
      app.MapSignalR();
    }
  }
}

接着编写服务端的hub类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace signalR
{
  public class ServerHub : Hub
  {
    public void SendMsg(string message)
    {
      //调用所有客户端的sendMessage方法(sendMessage有2个参数) 
      Clients.All.sendMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);
    }
  }
}

创建HomoController以及其Action函数Index

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace signalR.Controllers
{
  public class HomeController : Controller
  {
    public ActionResult Index()
    {
      return View();
    }
  }
}

Index前段代码

@{ 
  ViewBag.title = "SignaIR聊天窗口"; 
} 
<div class="container"> 
  <input type="text" id="message" /> 
  <input type="button" id="sendmessage" value="biubiu" /> 
  <ul id="messageBox"></ul> 
</div> 
@section scripts 
{ 
  <script src="~/Scripts/jquery.signalR-2.2.2.min.js"></script> 
  <script src="~/signalr/hubs"></script> 
  <script> 
    $(function () { 
      //引用自动生成的集线器代理 
      var chat = $.connection.serverHub; 
      //定义服务器调用的客户端sendMessage来显示新消息 
      chat.client.sendMessage = function (name, message) 
      { 
        //向页面添加消息 
        $("#messageBox").append('<li><strong style="color:green">'+name+'</strong>:'+message+'</li>'); 
      } 
      //设置焦点到输入框 
      $('#message').focus(); 
      //开始连接服务器 
      $.connection.hub.start().done(function () { 
        $('#sendmessage').click(function () { 
          //调用服务器端集线器的Send方法 
          chat.server.sendMsg($('#message').val()); 
          //清空输入框信息并获取焦点 
          $("#message").val('').focus(); 
        }) 
      }) 
    }); 
  </script> 
} 

运行效果,在任何一个窗口发送消息,其他所有客户端都能收到该消息。

运行程序的时候,Web页面就与SignalR的服务建立了连接,具体的建立连接的代码就是:$.connection.hub.start()。这句代码的作用就是与SignalR服务建立连接,后面的done函数表明建立连接成功后为按钮注册了一个click事件;也可以用集线器对象chat.connextion.start()

还记得这句吗?
<script src="~/signalr/hubs"></script>
F12看到的结果

上面的demo中的 Clients.All.sendMessage是调用所有客户端的sendMessage函数,属于群发。

下面是一个客户端分组的demo

服务端代码

 public void AddToRoom(string groupName, string userName)
    {
      //将连接添加到指定的组(Groups为HubBase中的接口属性)
      Groups.Add(Context.ConnectionId, groupName);
      //根据组名称获取对应客户端的组,调用该组的addUserIn方法
      Clients.Group(groupName, new string[0]).addUserIn(groupName, userName);
    }
    public void Send(string groupName, string detail, string userName)
    {
      //Clients.All.addSomeMessage(detail);//群发给所有
      //调用客户端某一个组的addSomeMessage
      Clients.Group(groupName, new string[0]).addSomeMessage(groupName, detail, userName);
    }

客户端代码

 chat.client.addSomeMessage = function(groupId, detail, userName) {
        console.info("广播消息:" + detail);
        $("#contentMsg").append("<li>" + userName + ": " + detail + "</li>");
      };

     chat.client.addUserIn = function(groupId, userName) {
        $("#contentMsg").append("<li>" + userName + "进入"+groupId+"号聊天室!</li>");
      };
      $.connection.hub.logging = true; //启动signalr状态功能
      $.connection.hub.start().done(function() {
        //加入聊天室 
        $("#joinRoom").click(function() {
          var groupId = $("#groupId").val();
          var userName = $("#userName").val();
          chat.server.addToRoom(groupId, userName);
        });
        //发送消息
        $("#send").click(function() {
          var detail = $("#message").val();
          var groupId = $("#groupId").val();
          var userName = $("#userName").val();
          chat.server.send(groupId, detail, userName);
        });
      });

运行效果


从上面两张图可以看出,客户端实现了分组

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# ASP.NET  # MVC  # SignalR  # Asp.net MVC SignalR来做实时Web聊天实例代码  # Asp.NET MVC中使用SignalR实现推送功能  # asp.net mvc signalr简单聊天室制作过程分析  # ASP.NET MVC 迅速集成 SignalR的过程  # 客户端  # 是一个  # 服务端  # 发送消息  # 聊天室  # 这句  # 开发人员  # 输入框  # 的是  # 而不是  # 程序包  # 都能  # 是指  # 可以用  # 它是  # 可以使用  # 任何一个  # 不符合  # 可以看出  # 两张 


相关文章: 建站之星CMS建站配置指南:模板选择与SEO优化技巧  如何在服务器上配置二级域名建站?  网站网页制作专业公司,怎样制作自己的网页?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  网站制作话术技巧,网站推广做的好怎么话术?  javascript中的try catch异常捕获机制用法分析  如何快速搭建高效香港服务器网站?  如何选择高效可靠的多用户建站源码资源?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何高效完成自助建站业务培训?  如何在Windows 2008云服务器安全搭建网站?  湖北网站制作公司有哪些,湖北清能集团官网?  红河网站制作公司,红河事业单位身份证如何上传?  如何在云主机上快速搭建网站?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何通过西部数码建站助手快速创建专业网站?  如何通过FTP空间快速搭建安全高效网站?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  简单实现Android验证码  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  北京的网站制作公司有哪些,哪个视频网站最好?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  如何在IIS服务器上快速部署高效网站?  Swift中switch语句区间和元组模式匹配  专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?  5种Android数据存储方式汇总  如何用已有域名快速搭建网站?  佛山网站制作系统,佛山企业变更地址网上办理步骤?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何快速生成凡客建站的专业级图册?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  网站微信制作软件,如何制作微信链接?  西安大型网站制作公司,西安招聘网站最好的是哪个?  视频网站制作教程,怎么样制作优酷网的小视频?  常州企业建站如何选择最佳模板?  购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?  建站之星×万网:智能建站系统+自助建站平台一键生成  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  网站制作模板下载什么软件,ppt模板免费下载网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  ,柠檬视频怎样兑换vip?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何在腾讯云免费申请建站?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  山东网站制作公司有哪些,山东大源集团官网?  如何在阿里云服务器自主搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。