詳解在ASP.NET Core下使用SignalR技術

來源:互聯網
上載者:User
本篇文章主要介紹了在ASP.NET Core下使用SignalR技術 ,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

一、前言

上次我們講到過如何在ASP.NET Core中使用WebSocket 。這次的主角是SignalR它為我們提供了簡化操作WebSocket的架構。

ASP .NET SignalR 是一個ASP.NET 下的類庫,可以在ASP.NET 的Web項目中實現即時通訊。什麼是即時通訊的Web呢?就是讓用戶端(Web頁面)和伺服器端可以互相通知訊息及調用方法,當然這是即時操作的。WebSockets是HTML5提供的新的API,可以在Web網頁與伺服器端間建立Socket串連,當WebSockets可用時(即瀏覽器支援Html5)SignalR使用WebSockets,當不支援時SignalR將使用其它技術來保證達到相同效果。

SignalR當然也提供了非常簡單易用的高階API,使伺服器端可以單個或批量調用用戶端上的JavaScript函數,並且非常 方便地進行串連管理,例如用戶端串連到伺服器端,或中斷連線,用戶端分組,以及用戶端授權,使用SignalR都非常容易實現。

二、SignalR目前情況

我們知道在ASP.NET Core 1.0.x 版本中並沒有包含SignalR,但是SignalR技術計劃整合在ASP.NET Core 1.2版本中,並且它的Team Dev還要使用TypeScript對它的javascript用戶端進行重寫,服務端方面也會貼近ASP.NET Core的開發方式,比如會整合到ASP.NET Core依賴注入架構中。

目前的情況就是在1.0中無法使用SignalR技術,本文實現的Demo都是在1.1下進行的。

三、整合SignalR

當然ASP.NET Core 1.2離正式發布還有一段時間,目前想整合SignalR都不是現成的方案,我們要通過手動的方式整合SignalR。

要在ASP.NET Core中使用SignalR,要先引用Microsoft.AspNetCore.SignalR.Server 、 Microsoft.AspNetCore.WebSockets 的NuGet Package包。

當然上面也說過目前沒有ASP.NET Core沒有整合SignalR,所以NUGET上也找不到SignalR的程式包,想添加引用我們就得去MyGet上去找找。

1.添加NuGet源

在程式根目錄建立一個命為NuGet.Config的檔案內容如下:

<?xml version="0" encoding="utf-8"?><configuration>  <packageSources>    <clear/>      <add key="aspnetcidev" value="https://dotnetmygetorg/F/aspnetcore-ci-dev/api/v3/indexjson"/>      <add key="apinugetorg" value="https://apinugetorg/v3/indexjson"/>  </packageSources></configuration>

當然我們也可以通過在Visual Studio中設定 NuGet Packages的源,來引用這個程式集。

2.在project.json添加引用

"MicrosoftAspNetCoreSignalRServer": "0-*","MicrosoftAspNetCoreWebSockets": "0-*"

可以注意到SignalR的版本是0.2.0的alpha版本,所以後續版本可能變化也會比較大! 聽說是好重寫的。

值得注意的是,SignalR目前只能在ASP.NET Core 1.1及以上版本上使用,在這個文章中我使用的.NET Core SDK版本為 1.0.0-preview2-003131 ,所以引用有問題的同學可以嘗試把CoreApp版本改為1.1,所有AspNetCore的程式集也都改變為1.1的版本。

3.添加配置代碼

我們需要在Startup類中的 ConfigureServices方法中添加如下代碼:

public void ConfigureServices(IServiceCollection services){   servicesAddSignalR(options =>    {     optionsHubsEnableDetailedErrors = true;   });}

在Startup類中的Configure方法中添加如下代碼:

appUseWebSockets();appUseSignalR();

4.添加一個HUB類

這裡我們只實現一個小Demo,一個簡單的聊天室,多個人進入可以看到各自發送的資訊:

public class ChatHub : Hub{    public static List<string> ConnectedUsers;    public void Send(string originatorUser, string message)    {      ClientsAllmessageReceived(originatorUser, message);    }    public void Connect(string newUser)    {      if (ConnectedUsers == null)        ConnectedUsers = new List<string>();      ConnectedUsersAdd(newUser);      ClientsCallergetConnectedUsers(ConnectedUsers);      ClientsOthersnewUserAdded(newUser);    }}

5.用戶端支援

在wwwroot目錄下建立一個名為chat.html的Html靜態檔案,內容如下:

<!DOCTYPE html><html><head>  <title>Awesome Chat Application</title>  <meta charset="utf-8" /></head><body>  <style type="text/css">    userListp{ float: right; }  </style>  <ul id="messages"></ul>  <input type="text" id="messageBox" />  <input type="button" id="sendMessage" value="Send Message!" />  <p class="userListp">    <ul id="userList"> </ul>  </p>   <script src="http://ajaxaspnetcdncom/ajax/jQuery/jquery-minjs"></script>  <script src="http://ajaxaspnetcdncom/ajax/signalr/jquerysignalr-minjs"></script>  <script src="signalr/hubs"></script>  <script src="chatjs"></script></body></html>

同目錄下建立一個chat.js添加要實現功能的指令碼:

var userName = prompt("Enter your name: ");var chat = $connectionchatHub;chatclientmessageReceived = function (originatorUser, message) {  $("#messages")append('<li><strong>' + originatorUser + '</strong>: ' + message);};chatclientgetConnectedUsers = function (userList) {  for (var i = 0; i < userListlength; i++)    addUser(userList[i]);};chatclientnewUserAdded = function (newUser) {  addUser(newUser);}$("#messageBox")focus();$("#sendMessage")click(function () {  chatserversend(userName, $("#messageBox")val());  $("#messageBox")val("");  $("#messageBox")focus();});$("#messageBox")keyup(function (event) {  if (eventkeyCode == 13)    $("#sendMessage")click();});function addUser(user){  $("#userList")append('<li>' + user + '</li>');}$connectionhublogging = true;$connectionhubstart()done(function () {  chatserverconnect(userName);});

最後我們來運行它吧:


以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援topic.alibabacloud.com。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.