国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET MVC中SignalR的簡單應(yīng)用

2024-07-10 12:54:41
字體:
供稿:網(wǎng)友

signr的魔力和實用性早已為人所知,但我們自己并沒有嘗試過,下面是錯新技術(shù)頻道小編帶給大家的ASP.NET MVC中SignalR的簡單應(yīng)用,一起來學(xué)習(xí)吧!

一、簡介

ASP.NET SignalR 是為 ASP.NET 開發(fā)人員提供的一個庫,可以簡化開發(fā)人員將實時 Web 功能添加到應(yīng)用程序的過程。實時 Web 功能是指這樣一種功能:當(dāng)所連接的客戶端變得可用時服務(wù)器代碼可以立即向其推送內(nèi)容,而不是讓服務(wù)器等待客戶端請求新的數(shù)據(jù)。——百度百科

  首先ASP.NET SignalR 是一個ASP .NET 下的類庫,可以在ASP .NET 的Web項目中實現(xiàn)實時通信。讓客戶端(Web頁面)和服務(wù)器端可以互相通知消息及調(diào)用方法。

  SignalR自動處理連接管理,可以讓服務(wù)端同時向所有連接的客戶端廣播消息,比如聊天室。也可以向特定的客戶端發(fā)送消息。客戶端和服務(wù)器之間的連接是持久的,與傳統(tǒng)的HTTP連接不同,它是為每個通信重新建立的。

  SignalR支持“服務(wù)器推送”功能,其中服務(wù)器代碼可以使用遠(yuǎn)程過程調(diào)用(RPC)調(diào)用瀏覽器中的客戶端代碼,而不是今天在網(wǎng)絡(luò)上常見的請求響應(yīng)模型。

  總之,SignalR是一個運行在.NET 平臺上的 html websocket 框架,它出現(xiàn)的主要目的是實現(xiàn)服務(wù)器主動推送(Push)消息到客戶端頁面

  注意:WebSocket要求服務(wù)器使用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();    }  }}

接著編寫服務(wù)端的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)    {      //調(diào)用所有客戶端的sendMessage方法(sendMessage有2個參數(shù))       Clients.All.sendMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), message);    }  }}

創(chuàng)建HomoController以及其Action函數(shù)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;       //定義服務(wù)器調(diào)用的客戶端sendMessage來顯示新消息       chat.client.sendMessage = function (name, message)       {         //向頁面添加消息         $("#messageBox").append('<li><strong style="color:green">'+name+'</strong>:'+message+'</li>');       }       //設(shè)置焦點到輸入框       $('#message').focus();       //開始連接服務(wù)器       $.connection.hub.start().done(function () {         $('#sendmessage').click(function () {           //調(diào)用服務(wù)器端集線器的Send方法           chat.server.sendMsg($('#message').val());           //清空輸入框信息并獲取焦點           $("#message").val('').focus();         })       })     });   </script> } 

?

運行效果,在任何一個窗口發(fā)送消息,其他所有客戶端都能收到該消息。

運行程序的時候,Web頁面就與SignalR的服務(wù)建立了連接,具體的建立連接的代碼就是:$.connection.hub.start()。這句代碼的作用就是與SignalR服務(wù)建立連接,后面的done函數(shù)表明建立連接成功后為按鈕注冊了一個click事件;也可以用集線器對象chat.connextion.start()

還記得這句嗎?
<script src="~/signalr/hubs"></script>
F12看到的結(jié)果

上面的demo中的 Clients.All.sendMessage是調(diào)用所有客戶端的sendMessage函數(shù),屬于群發(fā)。

下面是一個客戶端分組的demo

服務(wù)端代碼

 public void AddToRoom(string groupName, string userName)    {      //將連接添加到指定的組(Groups為HubBase中的接口屬性)      Groups.Add(Context.ConnectionId, groupName);      //根據(jù)組名稱獲取對應(yīng)客戶端的組,調(diào)用該組的addUserIn方法      Clients.Group(groupName, new string[0]).addUserIn(groupName, userName);    }    public void Send(string groupName, string detail, string userName)    {      //Clients.All.addSomeMessage(detail);//群發(fā)給所有      //調(diào)用客戶端某一個組的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狀態(tài)功能      $.connection.hub.start().done(function() {        //加入聊天室         $("#joinRoom").click(function() {          var groupId = $("#groupId").val();          var userName = $("#userName").val();          chat.server.addToRoom(groupId, userName);        });        //發(fā)送消息        $("#send").click(function() {          var detail = $("#message").val();          var groupId = $("#groupId").val();          var userName = $("#userName").val();          chat.server.send(groupId, detail, userName);        });      });

運行效果

從上面兩張圖可以看出,客戶端實現(xiàn)了分組

通過錯新技術(shù)頻道小編介紹的ASP.NET MVC中SignalR的簡單應(yīng)用,不管怎么樣錯新技術(shù)頻道會一如既往的提供更多的知識給大家。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 五台县| 同仁县| 江陵县| 玉树县| 葵青区| 河池市| 徐水县| 固始县| 钟山县| 武陟县| 毕节市| 自贡市| 芦溪县| 锡林郭勒盟| 永泰县| 泰兴市| 南靖县| 永川市| 衢州市| 庄浪县| 界首市| 巍山| 安溪县| 株洲县| 青海省| 延津县| 合水县| 石楼县| 资中县| 临洮县| 永德县| 萨迦县| 南木林县| 祥云县| 全州县| 明溪县| 峨眉山市| 江西省| 广州市| 闻喜县| 合江县|