濮阳杆衣贸易有限公司

主頁 > 知識庫 > asp.net mvc實現(xiàn)簡單的實時消息推送

asp.net mvc實現(xiàn)簡單的實時消息推送

熱門標簽:地圖標注位置怎么弄圖 電銷外呼系統(tǒng)是違法的嗎 威力最大的電銷機器人 電話機器人鑰匙扣 400電話唐山辦理 電銷專用外呼線路 漯河外呼調研線路 旅游地圖標注線路 廣西房產智能外呼系統(tǒng)推薦

因為項目需要,需要在網頁上實現(xiàn)消息的推送。在百度上搜索了一下,發(fā)現(xiàn)實現(xiàn)網頁上的消息推送,可以使用asp.net 中的SignalR類庫,當然也可以使用H5的WebSocket  Ajax的輪回。當然此處我們使用asp.net 中的SignalR類庫。因為它可以實現(xiàn)網頁上消息的實時推送。什么是實時推送呢,我簡單的說一下我個人的理解吧。實時:在同一時間類發(fā)生的事情,當然在計算機中并不是絕對的實時,因為CPU在同一時間片只能處理一個任務,那么這個時候疑問又來了?

我們平時使用電腦又上網,又聽音樂是如何實現(xiàn)的呢,因為現(xiàn)在的CPU的計算速度很快。CPU會把處理不同的任務的時間片,CPU會把時間片劃到很小,很小,小到我們人類感知不到。比如在現(xiàn)在這個時間片上,CPU正在處理音樂任務,在下一個時間片的時候,CPU又在處理上網任務。所以我認為在計算機并沒有絕對的實時,只是我們人類感知不到罷了。

推送:在此處的推送是指在網頁消息推送。例如:用戶A和B分別在各自的電腦打開打開一個相同的消息推送網頁。假設用戶A現(xiàn)在向用戶B發(fā)送消息。就要經歷一個這樣的過程 用戶A->Server->用戶B。當然具體的底層實現(xiàn)過程,我就不在些探討了哈。因為這個不是現(xiàn)在所要探討的主題。因為Server有地址一般是固定不變的。所以客戶端向服務器發(fā)送消息比較容易,因為目的地址固定。那服務器如何向客戶端發(fā)送消息呢,這個就有點難道了因為客戶端的地址不固定的,并且http是無狀態(tài)的是不能記住用戶的地址的。

所以為了解決這一個問題,計算機的先輩們用到了幾個方法:

1、客戶端"心跳"。每隔一段時間去訪問服務器,看看服務器有沒有任務給其客戶端。Ajax的輪回就是使用的這個方法。缺點就是實時性不太高。

2、服務端和客戶端的長連接,本文所要談到的SignalR就是用的這種思想。缺點:服務器的壓力大。 

好了,現(xiàn)在就說一下什么是SignalR吧。SignalR 是為 ASP.NET 開發(fā)人員提供的一個庫,可以簡化開發(fā)人員將實時 Web 功能添加到應用程序的過程。實時 Web 功能是指這樣一種功能:當所連接的客戶端變得可用時服務器代碼可以立即向其推送內容,而不是讓服務器等待客戶端請求新的數據。這個也就實現(xiàn)消息的實時推送。我個人理解的實現(xiàn)原理是首先由服務器定制一個函數用于一個客戶端調用將消息發(fā)送給另一個客戶端。當然客戶端也需要定抽一個函數。因為服務器需要調用客戶端的這個函數。

下面就說下具體的操作方法吧。
1、環(huán)境:win 10+VS2015 社區(qū)版
我使用asp.net mvc。首先打開VS 2015|文件|新建|項目(SignalRMvc)|asp.net Web應用程序|空模板,MVC,平臺大概就是這樣了。
現(xiàn)在說下具體需要包含的文件吧。
1)、SignalR集線器類。用于寫一個訪求調用客戶段的函數。
2)、OWIN類。用于注冊服務器的函數。
3)、前臺的頁面(包括前臺的消息框的編寫,函數的編寫)當然前臺需要一些文件。 

一般VS沒有自帶SignalR類,需要我們在開始任務之前去添加這個功能。選擇VS的工具|Nuget包管理器|Nuget包管理器控制臺|Install-Package Microsoft.Aspnet.SignalR去安裝SignalR。安裝完成后,1、我們在改項目中新建一個文件夾為ChatHubs|新建一個SignalR集線器類,并寫上如下代碼: 

using Microsoft.AspNet.SignalR;

namespace SignalRMvc.ChatHubs
{
 public class ChatHub : Hub
 {
  public void SendMessage(string name,string message)
  {
   // Clients.All.hello();
   Clients.All.receiveMessage(name, message);
   //用戶調用客戶端的函數
  }
 }
}

 2、在ChatHubs文件夾下新建一個OWIN類。并寫上如下代碼: 

using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(SignalRMvc.ChatHubs.Startup))]

namespace SignalRMvc.ChatHubs
{
 public class Startup
 {
  public void Configuration(IAppBuilder app)
  {
   app.MapSignalR();
   //服務器的hub注冊
  }
 }
}

3、在Controllers新建一個Home控制器。并寫上如下代碼: 

using System.Web.Mvc;

namespace SignalRMvc.Controllers
{
 public class HomeController : Controller
 {
  // GET: Home
  public ActionResult ClientChat()
  {
   return View();
  }
 }
}

4、在控制器的方法上右擊添加視圖(不使用模板,也不使用布局頁)后。并寫上如下代碼: 

@{
 Layout = null;
}

!DOCTYPE html>
html>
head>
 meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 title>/title>
 meta charset="utf-8" />
 link href="~/Content/bootstrap.min.css" rel="stylesheet" />
 @* BootStarp的引入*@
 style>
  #message_box {
   height: 400px;
   overflow-y: scroll;
  }
 /style>
 @* 呈現(xiàn)消息 *@
/head>
body>
 div class="container">
  div class="row">
   div class="jumbotron">
    ul id="message_box">/ul>
   /div>
   發(fā)送者名稱:input id="text_name" class="form-control" />br />
   消息內容:
   textarea id="text_message" class="form-control" rows="3">/textarea>
   br />
   button id="btn_send" class="btn btn-block btn-success">Send/button>
  /div>
 /div>

 script src="~/scripts/jquery-3.1.0.min.js">/script>
 script src="~/scripts/jquery.signalR-2.2.1.min.js">/script>
 @* 上述引入的兩個文件的順序不以交換,因為下面這個文件依賴于上面那個文件 *@
 script src="~/signalr/hubs">/script>
 !-- 本地沒有,動態(tài)生成 -->
 script>
  $(function () {
   var $messageBox = $('#message_box');
   var $textMessage = $('#text_message');
   var $textName = $('#text_name');
   //客戶端先與服務器連接起來,拿到服務器的代理操作對象
   var hubConnection = $.connection.chatHub;
   //注冊客戶端函數
    hubConnection.client.receiveMessage = function (name, message) {
    $messageBox.append('li>b>' + name + '/b> say:' + message + '/li>')
   }

   //啟動連接到服務器
   $.connection.hub.start().done(function () {
    $('#btn_send').bind('click', function () {
     //調用服務端的函數
     hubConnection.server.sendMessage($textName.val(), $textMessage.val());
    });
   });
  });
 /script>
/body>
/html>

如果直接復制使用。要注意前臺的代碼引入的文件的目錄及版本。前臺代碼的命名的首字母最好使用小寫,后臺代碼的首字母最好使用大寫。因為js默認使用的是駝峰命名法,C Sharp使用帕斯卡命名方式。如果沒有注重這個細節(jié)就會很容易出錯。因為后臺代碼在執(zhí)行的時候會動態(tài)的生成一些JS代碼,JS代碼的默認使用的駝峰命名法。如果你在前臺的代碼用了帕斯卡命名方式就很容易出錯了。并且還不好找。我是有過親身經歷的。 

下面我們在本地測試下:分別使用FireFox和Chrome來模擬兩個客戶端,當然自身的電腦也就服務端。效果圖如下:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 基于SignalR的消息推送與二維碼掃描登錄實現(xiàn)代碼
  • Asp.NET MVC中使用SignalR實現(xiàn)推送功能
  • 使用SignalR推送服務在Android的實現(xiàn) SignalA
  • ASP.NET實現(xiàn)推送文件到瀏覽器的方法
  • .net平臺推送ios消息的實現(xiàn)方法
  • .net 通過URL推送POST數據具體實現(xiàn)
  • SignalR Self Host+MVC等多端消息推送服務(二)
  • SignalR Self Host+MVC等多端消息推送服務(一)
  • SignalR Self Host+MVC等多端消息推送服務(三)

標簽:無錫 焦作 試駕邀約 湘西 綏化 湖北 銅陵 欽州

巨人網絡通訊聲明:本文標題《asp.net mvc實現(xiàn)簡單的實時消息推送》,本文關鍵詞  asp.net,mvc,實現(xiàn),簡單,的,;如發(fā)現(xiàn)本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《asp.net mvc實現(xiàn)簡單的實時消息推送》相關的同類信息!
  • 本頁收集關于asp.net mvc實現(xiàn)簡單的實時消息推送的相關信息資訊供網民參考!
  • 推薦文章
    北流市| 清新县| 定远县| 宜兰市| 湾仔区| 赤峰市| 漳浦县| 石狮市| 上虞市| 翼城县| 巴塘县| 龙南县| 满城县| 江永县| 商都县| 叙永县| 阿合奇县| 水城县| 深泽县| 茶陵县| 库尔勒市| 普定县| 卢龙县| 大悟县| 舞阳县| 寿光市| 苏州市| 五大连池市| 麻城市| 汝阳县| 淄博市| 全椒县| 兴隆县| 巩留县| 遂宁市| 光泽县| 巴马| 鲁山县| 青海省| 石家庄市| 邵东县|