<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      史上最全面的SignalR系列教程-2、SignalR 實現推送功能-永久連接類實現方式

      1、概述

      通過上篇史上最全面的SignalR系列教程-1、認識SignalR文章的介紹,我們對SignalR技術已經有了一個全面的了解。本篇開始就通過SignalR的典型應用的實現方式做介紹,例子雖然簡單,但麻雀雖小五臟俱全??梢砸源藶榛A,擴展到實際應用中。

      SignalR 的實現機制與.NET WCF 或 Remoting 是相似的,都是使用遠程代理來實現。在具體使用上,有兩種不同通信模型:PersistentConnection 和 Hubs,其中 PersistentConnection 是實現了長時間的 Javascript 輪詢(類似于 Comet),Hub 是用來解決實時信息交換問題,它是利用 Javascript 動態載入執行方法實現的。SignalR 將整個連接,信息交換過程封裝得非常漂亮,客戶端與服務器端全部使用 JSON 來交換數據。

      對于這兩種方式的討論,感興趣的朋友可以移步:https://stackoverflow.com/questions/9280484/signalr-why-choose-hub-vs-persistent-connection

      本篇主要介紹使用SignalR的永久連接類(Persistent Connections)的實現方式來實現消息推送(廣播)功能,分別以Asp.NET MVC與控制臺程序做實例演示。對于Hubs這種集線器的實現方式在下篇文章介紹。

      2、SignalR的永久連接類Mvc實現

      在ASP.NET MVC下實現SignalR的永久連接類非常的簡單,只需簡單4步就可以實現一個簡單的群聊功能。

      2.1、 創建ASP.NET Mvc項目

      2.2、安裝Nuget包

      創建好項目后,要使用SignalR,需要先安裝SignalR包,可以通過程序包管理控制臺輸入包安裝命令進行安裝。

      Install-Package Microsoft.AspNet.SignalR
      

      也可以使用界面方式,如下圖所示。

      安裝SignalR包-Microsoft.AspNet.SignalR

      2.3、增加SignalR服務

      規劃適當的SignalR服務文件存放的文件夾,如我們放在Connections文件夾中,在此文件夾右鍵選擇新建項,我們選擇SignalR Persistent Connection Class永久連接類項。

      添加SignalR服務

      確定后,VS會自動給我們生成對應代碼,如下:

      using System.Threading.Tasks;
      using Microsoft.AspNet.SignalR;
       
      namespace SignalRTestProj_1.Connections
      {
          public class ChatConnection : PersistentConnection
          {
              protected override Task OnConnected(IRequest request, string connectionId)
              {
                  return Connection.Send(connectionId, "Welcome!");
              }
       
              protected override Task OnReceived(IRequest request, string connectionId, string data)
              {
                  return Connection.Broadcast(data);
              }
          }
      }
      

      我們對代碼做適當修改,讓業務更人性化,如下所示:

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Threading;
      using System.Threading.Tasks;
      
      
      namespace SignalRTestProj_1.Connections
      {
          using Microsoft.AspNet.SignalR;
      
          public class ChatConnection : PersistentConnection
          {
              private static int _connections = 0;
      
              protected override Task OnConnected(IRequest request, string connectionId)
              {
                  Interlocked.Increment(ref _connections);
                  //廣播消息
                  Connection.Broadcast("新的連接加入,連接ID:" + connectionId + ",已有連接數:" + _connections);
                  return Connection.Send(connectionId, "雙向連接成功,連接ID:" + connectionId);
              }
      
              /// <summary>
              /// 連接斷開 
              /// </summary>
              protected override Task OnDisconnected(IRequest request, string connectionId, bool stopCalled)
              {
                  Interlocked.Decrement(ref _connections);
                  return Connection.Broadcast(connectionId + "退出連接,已有連接數:" + _connections);
              }
      
              protected override Task OnReceived(IRequest request, string connectionId, string data)
              {
                  var message = connectionId + "發送內容>>" + data;
                  return Connection.Broadcast(message);
              }
          }
      }
      

      2.4、啟動路由注冊

      要使Signal啟作用,我們必須啟動路由注冊,要讓客戶端能找到,我們使用Owin。如下圖所示,我們添加一個Owin Start啟動類。

      增加Startup啟動類

      using Microsoft.Owin;
      using Owin;
      using SignalRTestProj_1.Connections;
      
      [assembly: OwinStartup(typeof(SignalRTestProj_1.App_Start.ChartStartup))]
      
      namespace SignalRTestProj_1.App_Start
      {
          public class ChartStartup
          {
              public void Configuration(IAppBuilder app)
              {
                  // 有關如何配置應用程序的詳細信息,請訪問 https://go.microsoft.com/fwlink/?LinkID=316888
                  // 配置上文實現的ChatConnections
                  app.MapSignalR<ChatConnection>("/Connections/ChatConnection");
              }
          }
      }
      

      至此,我們服務端就算搭建起來了,現在我們增加一個頁面來實現調用。

      2.5、前端界面處理

      前端js實現消息廣播,并實時記錄

      <html>
      	<head>
      	    <meta name="viewport" content="width=device-width" />
      	    <title>SignalR永久連接類 Demo</title>
      	    <script src="~/Scripts/jquery-3.3.1.min.js"></script>
      	    <script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
      	</head>
      	<body>
      	    <div>
      	        <h1>SignalR永久連接類 Demo</h1>
      	        <div>
      	            <input type="text" id="msgContext" placeholder="請輸入消息內容...." />
      	            <button id="sendMessage" class="btn-primary">Send</button>            
      	            <ul id="messages"></ul>
      	        </div>
      	        <script>
      	            var connection = $.connection("/Connections/ChatConnection");
      	            connection.logging = true;
      	            //客戶端接收消息
      	            connection.received(function (data) {
      	                $('#messages').append('<li>' + data + '</li>');
      	            });
      	            //連接錯誤處理
      	            connection.error(function (err) {
      	                alert('與服務器連接報錯:'+ err.message);
      	            });
      	            //連接成功
      	            connection.start().done(function () {
      	                $('#sendMessage').click(function () {
      	                    var val = $('#msgContext').val();
      	                    //向服務器端發送消息
      	                    connection.send(val);
      	                });
      	            });
      	        </script>
      	    </div>
      	</body>
      </html>
      

      OK,全面完成,F5運行看效果吧。

      2.6、效果展示

      3、控制臺做SignalR服務端實現

      除了Web實時應用之外,我們還可以用其他應用程序實現實時交互,如控制臺。
      只需要Install-Package Microsoft.AspNet.SignalR.Client命令,示例代碼如下:

      using Microsoft.AspNet.SignalR.Client;
      using static System.Console;
      
      namespace ClientWithSignalRDemo
      {
          class Program
          {
              static void Main(string[] args)
              {
                  var connection = new Connection("http://localhost:65309/Connections/ChatConnection");
      
                  connection.Received += WriteLine;
                  connection.Start().Wait();
      
                  string line;
                  while ((line = ReadLine()) != null)
                  {
                      connection.Send(line).Wait();
                  }
              }
          }
      }
      

      4、代碼下載

      實例源碼可以移步github下載,地址:https://github.com/yonghu86/SignalRTestProj

      5、參考文章


      一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址了解詳情。

      RDIFramework.NET官方網站:http://www.rdiframework.net/

      RDIFramework.NET官方博客:http://blog.rdiframework.net/

      同時需要說明的,以后的所有技術文章以官方網站為準,歡迎大家收藏!

      RDIFramework.NET框架由海南國思軟件科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用!

      歡迎關注RDIFramework.net框架官方公眾微信(微信號:guosisoft),及時了解最新動態。

      掃描二維碼立即關注

      微信號:guosisoft

      posted @ 2019-08-12 11:26  .NET快速開發框架  閱讀(1776)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 成人午夜电影福利免费| 亚洲av乱码久久亚洲精品| 国产黄色三级三级看三级| 国产综合色精品一区二区三区| 亚洲日本欧美日韩中文字幕| 日韩人妻久久精品一区二区| 777奇米四色成人影视色区| 国产乱码精品一区二区三区中文| 国产成人精品a视频| 国产精品二区中文字幕| 天美传媒一区二区| 亚洲黄色片一区二区三区| 黄色三级亚洲男人的天堂| 一道本AV免费不卡播放| 人妻精品动漫h无码| 熟妇人妻中文a∨无码| 国语做受对白XXXXX在线| 新安县| 成在人线av无码免费| 精品一区二区成人码动漫| 精品综合久久久久久97| 亚洲国产欧美在线人成AAAA| 午夜福利宅福利国产精品| 亚洲高清日韩heyzo| 美女爽到高潮嗷嗷嗷叫免费网站 | 中文字幕在线观看一区二区| 香蕉亚洲欧洲在线一区| 国产激情精品一区二区三区| 国产无套粉嫩白浆在线| 色综合伊人色综合网站| 精品超清无码视频在线观看| 亚洲女初尝黑人巨| 蜜桃臀av在线一区二区| 亚洲中文字幕一二三四区| 精品人妻伦一二三区久久aaa片| 7878成人国产在线观看| 久久亚洲国产精品五月天| 亚洲天堂伊人久久a成人| 99在线精品国自产拍中文字幕| 日本无码欧美一区精品久久| 国产精品免费观在线|