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

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