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