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(如果用户已经登录)。我们也重写了OnConnectedOnDisconnected,这仅仅是为了示范用法,实际上在这里并不需要。

  这里,客户端的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集成的更多相关文章

  1. ABP官方文档翻译 7.2 Hangfire集成

    Hangfire集成 介绍 ASP.NET Core集成 ASP.NET MVC 5.x集成 面板授权 介绍 Hangfire是一个综合的后台job管理器.你可以 把它集成到ABP,用来取代默认的后台 ...

  2. ABP官方文档翻译 9.3 NHibernate集成

    NHibernate集成 Nuget包 配置 实体映射 仓储 默认实现 自定义仓储 应用程序特定基础仓储类 ABP可以使用任何ORM框架,它内置集成NHibernate.此文档将讲解ABP如何使用NH ...

  3. ABP官方文档翻译 9.1 EntityFramework集成

    EntityFramework集成 Nuget包 DbContext 仓储 默认仓储 自定义仓储 应用特定的基础仓储类 自定义仓储示例 仓储最佳实践 事务管理 数据存储 ABP可以使用ORM框架,它内 ...

  4. ABP官方文档翻译 7.3 Quartz集成

    Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化 ...

  5. ABP官方文档翻译 5.4 SwaggerUI集成

    SwaggerUI集成 介绍 ASP.NET Core 安装Nuget包 配置 测试 ASP.NET 5.x 安装Nuget包 配置 测试 介绍 在它的网站上:“...使用Swagger可用的API, ...

  6. ABP官方文档翻译 5.3 OData集成

    OData集成 介绍 安装 安装Nuget包 设置模块依赖 配置实体 创建控制器 配置 示例 获取实体列表 Request Response 获取单个实体 Request Response 使用导航属 ...

  7. ABP官方文档翻译 1.6 OWIN集成

    OWIN集成 安装 使用 如果在应用程序里既使用ASP.NET MVC也使用ASP.NET Web API,需要在工程里安装Abp.Owin包. 安装 添加Abp.Owin包到主工程里(一般是web工 ...

  8. 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 ...

  9. ABP官方文档翻译 0.0 ABP官方文档翻译目录

    一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...

随机推荐

  1. lambdas了解

    Lambdas了解 功能接口的一个极其宝贵的特性是可以使用lambdas实例化它们.以下是一些关于lambdas的例子: 以逗号分隔的输入列表,左边是指定类型的输入,右边是返回的块:          ...

  2. vijos 1213:80人环游世界

    描述 想必大家都看过成龙大哥的<80天环游世界>,里面的紧张刺激的打斗场面一定给你留下了深刻的印象.现在就有这么一个80人的团伙,也想来一次环游世界. 他们打算兵分多路,游遍每一个国家. ...

  3. 【Java学习笔记之五】java数组详解

    数组 概念 同一种类型数据的集合.其实数组就是一个容器. 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度] ...

  4. c语言基础学习06

    =============================================================================涉及到的知识点有:1.C语言库函数.字符输入函 ...

  5. malloc函数用法

    malloc函数用法 函数声明(函数原型): void *malloc(int size); 说明:malloc 向系统申请分配指定size个字节的内存空间.返回类型是 void* 类型.void* ...

  6. 《TensorFlow深度学习应用实践》

    http://product.dangdang.com/25207334.html 内容 简 介 本书总的指导思想是在掌握深度学习的基本知识和特性的基础上,培养使用TensorFlow进行实际编程以解 ...

  7. Equals()和GetHashCode()方法深入了解

    最近在看Jeffrey Richter的CLR Via C#,在看到GetHashCode()方法的时候,有一个地方不是特别明白,就是重写Equals()方法时为什么要把GetHashCode()方法 ...

  8. svn过滤文件配置

    ---恢复内容开始--- 在 在输入框中输入这个即可..... .classpath .project .springBeans *.class *.o *.lo *.la *.al .libs *. ...

  9. linux下删除.svn的方法

    find ./ -type d -name ".svn" | xargs rm -rf

  10. [OpenCV学习笔记2][Mat数据类型和操作]

    [Mat数据类型和基本操作] ®.运行环境:Linux(RedHat+OpenCV3.0) 1.Mat的作用: Mat类用于表示一个多维的单通道或者多通道的稠密数组.能够用来保存实数或复数的向量.矩阵 ...