首先了解常見的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