ABP中的Signalr

首先了解常見的Web實時消息交互方式。可以先讀以下文章

https://www.cnblogs.com/Wddpct/p/5650015.html

本篇文章的目的:1.什麼是Signalr,.net core中如何使用  ,2.ABP如何配置、使用Signalr,

一.什麼是Signalr?

①根據官方文檔https://docs.microsoft.com/zh-cn/aspnet/core/signalr/introduction?view=aspnetcore-2.1得知:

SignalR是一個.NET Core/.NET Framework的開源實時框架. SignalR的可使用Web Socket, Server Sent Events 和 Long Polling作爲底層傳輸方式.

SignalR基於這三種技術構建, 抽象於它們之上, 它讓你更好的關注業務問題而不是底層傳輸技術問題.

SignalR這個框架分服務器端和客戶端, 服務t以器端支持ASP.NET Core 和 ASP.NET; 而客戶端除了支持瀏覽器裏的javascrip外, 也支持其它類型的客戶端, 例如桌面應用.

瞭解.net core的Signalr請配合【在ASP.NET CORE 2.0使用SignalR技術】此博客食用。

 

二、ABP是如何配置、使用Signalr?

下列代碼在ABP官網項目中已經實現,我現在只是列舉出來,可以和【在ASP.NET CORE 2.0使用SignalR技術】這篇文章進行對比,瞭解純.NET CORE SignalR和ABP中SignalR使用的不同。

1.在服務端中

首先,Web.Host的Startup中添加配置代碼

services.AddSignalR();

Configure方法中添加配置代碼:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseStaticFiles();
    app.UseSignalR(routes =>
    {
        routes.MapHub<Chat>("hubs");
    });
}

2.在客戶端中實現

這裏只講Vue.js構建的客戶端。這些配置官方項目都有,如果需要用自己的項目,加入ABP服務端功能可以按照以下步驟去做

1.靜態文件的引入,在html中加入

    <script type="text/javascript" src="/dist/abp.js"></script>
    <script type="text/javascript" src="/dist/signalr.min.js"></script>

需要使用webpack插件CopyWebpackPlugin拷貝靜態文件。

在webpack.dev.conf.js和webpack.prod.conf.js中加入如下代碼

    new CopyWebpackPlugin([{
      from: 'node_modules/@aspnet/signalr/dist/browser/signalr.min.js',
      to: 'dist'
    }, {
      from: 'node_modules/abp-web-resources/Abp/Framework/scripts/libs/abp.signalr-client.js',
      to: 'dist'
    }, {
      from: 'src/lib/abp.js',
      to: 'dist'
    }])

意思將這三個文件複製到指定目錄下。其中abp.js和signalr.min.js在html中引入,abp.signalr-client.js則在SignalRAspNetCoreHelper.ts這個文件中引入。

2.使用

在main.js文件中初始化SignalRAspNetCoreHelper,並監聽事件

SignalRAspNetCoreHelper.initSignalR();
var _this = this
window.abp.event.on('abp.notifications.received', function(userNotification) {//監聽消息接收事件
//這裏寫事件觸發後需要執行的方法
          });

如果項目需要在IE上運行,在webpack.base.conf.js文件夾下對導入的文件使用babel-loader轉換,代碼如下:

      {
        test: /\.(js|ts)?$/,
        loader: 'babel-loader',
        include: [
          resolve('src'),
          resolve('test'),
          resolve('node_modules/webpack-dev-server/client'),
          resolve('node_modules/@aspnet/signalr/dist/browser/signalr.min.js'),
          resolve('node_modules/abp-web-resources/Abp/Framework/scripts/libs/abp.signalr-client.js'),
          resolve('src/lib/abp.js')
        ]
      },

三、總結

在這邊簡單的總結以下純.NET CORE SignalR和ABP中SignalR使用的不同

服務端的配置基本相同,客戶端都需要引入signjalr-client.js,但ABP封裝成abp.signalr-client.js,ABP的實時通知服務已經擁有訂閱模式和發佈模式,我們可以直接使用。

 

 

參考文章鏈接

https://www.cnblogs.com/maxzhang1985/p/7118426.html

https://www.cnblogs.com/farb/p/ABPSignalRIntegration.html

https://www.cnblogs.com/kenzoBlog/articles/10566698.html

https://www.cnblogs.com/anyushengcms/p/8035924.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章