ABP官方文档翻译 8.2 SignalR集成
SignalR集成
介绍
ABP中的Abp.Web.SignalRnuget包使的使用SignalR变得极其容易。参见SignalR文档了解关于SignalR更多的详细信息。
安装
服务器端
在工程中(通常在web层)安装Abp.Web.SignalR nuget包,并在模块中添加如下依赖:
[DependsOn(typeof(AbpWebSignalRModule))]
public class YourProjectWebModule : AbpModule
{
//...
}
然后,在OWIN startup类中使用MapSignalR方法:
[assembly: OwinStartup(typeof(Startup))]
namespace MyProject.Web
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(); //...
}
}
}
注意:Abp.Web.SignalR仅依赖于Microsoft.AspNet.SignalR.Core包。所以,你还需要在工程中安装Microsoft.AspNet.SignalR包,如果以前没有安装的话(参见SignalR文档了解更多)。
客户端
abp.signalr.js脚本需要包含在页中。它位于Abp.Web.Resources包中(启动模板中已经安装)。我们需要在signalr hubs之后添加它:
<script src="~/signalr/hubs"></script>
<script src="~/Abp/Framework/scripts/libs/abp.signalr.js"></script>
就这样。SignalR已经配置并集成到你工程中了。
建立连接
当abp.signalr.js包括在页中时,ABP会自动连接服务器(从客户端)。通常这是合适的。但是有些情况你并不希望这样。你可以在abp.signalr.js之前添加下面这些代码来禁用自动连接:
<script>
abp.signalr = abp.signalr || {};
abp.signalr.autoConnect = false;
</script>
在这种情况下,任何你需要连接服务器的时候,可以手动调用abp.signalr.connect()函数。
如果abp.signalr.autoConnect设置为true,当客户端断开连接时,ABP会自动连接服务器(从客户端)。
当客户端连接服务器时会触发“abp.signalr.conneted”全局事件。当连接成功建立的时候,你可以注册这个事件来执行操作。参见javascript事件总线文档了解更多关于客户端事件。
內建特征
在应用中你可以使用SignalR的所有功能。另外,Abp.Web.SignalR包实现了一些内建特征。
通知
Abp.Web.SignalR包实现了IRealTimeNotifier来给客户端(参见通知系统)发送实时通知。因此,用户可以获得实时推送的通知。
在线客户端
ABP提供了IOnlineClientManager来获取关于在线用户的信息(例如,注入IOnlineClientManager并使用GetByUserIdOrNull,GetAllClients,IsOnline方法)。IOnlineClientManager需要一个通讯基础设施才可以使用。Abp.Web.SignalR包提供了基础设施。所以,如果安装了SignalR,你可以在任何层注入并使用IOnlineClientManager.
PascalCase与CamelCase对比
Abp.Web.SignalR包重写了SignalR默认的ContractResolver来使用CamelCasePropertyNamesContractResolver进行序列化。因此,在服务端我们的类有PascalCase形式命名的属性,在客户端以camelCase的形式使用它们来发送/接收对象(因为在javascript中camelCase是首选的记法)。如果你想在一些程序集中的类忽略这个,那么你可以将这些程序集添加到AbpSignalRContractResolver.IgnoredAssemblies列表。
你的SignalR代码
Abp.Web.SignalR包简化了SignalR代码。假定我们想给应用添加一个hub:
public class MyChatHub : Hub, ITransientDependency
{
public IAbpSession AbpSession { get; set; } public ILogger Logger { get; set; } public MyChatHub()
{
AbpSession = NullAbpSession.Instance;
Logger = NullLogger.Instance;
} public void SendMessage(string message)
{
Clients.All.getMessage(string.Format("User {0}: {1}", AbpSession.UserId, message));
} public async override Task OnConnected()
{
await base.OnConnected();
Logger.Debug("A client connected to MyChatHub: " + Context.ConnectionId);
} public async override Task OnDisconnected(bool stopCalled)
{
await base.OnDisconnected(stopCalled);
Logger.Debug("A client disconnected from MyChatHub: " + Context.ConnectionId);
}
}
我们实现了ITransientDependency来简化注册我们的hub到依赖注入系统(你可以基于需求将它设计为单例)。我们通过属性注入了sesson和logger。
SendMessage是我们hub的一个方法,可以被客户端使用。在这个方法中我们调用所有客户端的getMessage函数。如你所见,我们可以使用AbpSession获取当前用户id(如果用户已经登录)。我们也重写了OnConnected和OnDisconnected,这仅仅是为了示范用法,实际上在这里并不需要。
这里,客户端的javascript代码使用我们的hub发送/接收消息:
var chatHub = $.connection.myChatHub; //get a reference to the hub
chatHub.client.getMessage = function (message) { //register for incoming messages
console.log('received message: ' + message);
};
abp.event.on('abp.signalr.connected', function() { //register for connect event
chatHub.server.sendMessage("Hi everybody, I'm connected to the chat!"); //send a message to the server
});
我们可以在任何需要发送消息给客户端时使用chatHub。参见SignalR文档了解更多SignalR的详细信息。
ABP官方文档翻译 8.2 SignalR集成的更多相关文章
- ABP官方文档翻译 7.2 Hangfire集成
Hangfire集成 介绍 ASP.NET Core集成 ASP.NET MVC 5.x集成 面板授权 介绍 Hangfire是一个综合的后台job管理器.你可以 把它集成到ABP,用来取代默认的后台 ...
- ABP官方文档翻译 9.3 NHibernate集成
NHibernate集成 Nuget包 配置 实体映射 仓储 默认实现 自定义仓储 应用程序特定基础仓储类 ABP可以使用任何ORM框架,它内置集成NHibernate.此文档将讲解ABP如何使用NH ...
- ABP官方文档翻译 9.1 EntityFramework集成
EntityFramework集成 Nuget包 DbContext 仓储 默认仓储 自定义仓储 应用特定的基础仓储类 自定义仓储示例 仓储最佳实践 事务管理 数据存储 ABP可以使用ORM框架,它内 ...
- ABP官方文档翻译 7.3 Quartz集成
Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化 ...
- ABP官方文档翻译 5.4 SwaggerUI集成
SwaggerUI集成 介绍 ASP.NET Core 安装Nuget包 配置 测试 ASP.NET 5.x 安装Nuget包 配置 测试 介绍 在它的网站上:“...使用Swagger可用的API, ...
- ABP官方文档翻译 5.3 OData集成
OData集成 介绍 安装 安装Nuget包 设置模块依赖 配置实体 创建控制器 配置 示例 获取实体列表 Request Response 获取单个实体 Request Response 使用导航属 ...
- ABP官方文档翻译 1.6 OWIN集成
OWIN集成 安装 使用 如果在应用程序里既使用ASP.NET MVC也使用ASP.NET Web API,需要在工程里安装Abp.Owin包. 安装 添加Abp.Owin包到主工程里(一般是web工 ...
- ABP官方文档翻译 10.1 ABP Nuget包
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OD ...
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
随机推荐
- bzoj:4762: 最小集合
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4762 mark一下,有空要好好弄懂 #include<cstdio> #inc ...
- C/C++中inline用法详解
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- c++(排序二叉树线索化)
前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么 ...
- Android studio启动后卡在refreshing gradle project(包解决)
这个问题几乎每个刚使用Android studio的同学都会碰到过,网上有各式各样的方法,有的说使用本地gradle,我试过多次,每次启动android studio时还是会检查更新,所以根本上解决的 ...
- linux中的两个命令setfacl和chmod有什么区别
setfacl命令可以用来细分linux下的文件权限.chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限. 比较常用的用法如下:setfacl ...
- 虚拟主机,VPS,云主机之间的区别?
虚拟主机即共享主机,是利用虚拟技术把一台完整的服务器分成若干个主机,拥有多个网站,共享这台服务器的硬件和带宽的资源.可以托管简单的静态和动态的网站,满足客户最基本的网络托管需求. VPS是将一台物理服 ...
- TP5 中实现支付宝支付 利用model层调用支付宝类库
<?php /** * Created by PhpStorm. * User: admin * Date: 2017/8/16 * Time: 09:16 */ namespace app\a ...
- ngRx 官方示例分析 - 1. 介绍
ngRx 的官方示例演示了在具体的场景中,如何使用 ngRx 管理应用的状态. 示例介绍 示例允许用户通过查询 google 的 book API 来查询图书,并保存自己的精选书籍列表. 菜单有两 ...
- Docker镜像导致centos-root根分区容量爆满
当虚拟机服务器运行Docker久了后,发现Docker的文件越来越大,某天发现此台机上的数据库访问不了了,再重启数据库等日志,提示空间不足,查看磁盘空间: root分区满载啊,前段时间还有不少空间的, ...
- JavaScript 变量、类型与计算
变量类型 变量计算 变量 题目: JavaScript 中使用typeof能得到的有哪些类型? ``` 1.1 变量类型 (1).js中的数据类型:字符串.数字.布尔.数组.对象.Null.Undef ...