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. GDOI2016游记

    翘课真好……(下午返校gg…… 为了GDOI,我特地准备了一堆模板,然后,由于在考前不久发现一个挺好玩的手游……模板就这么被放在一边(只翻了几次…… Day 0 同样是坐动车,到广州后转大巴到四会市, ...

  2. HDU_5563Clarke and five-pointed star

    Clarke and five-pointed star Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  3. 通过案例理解position:relative和position:absolute

    w3school过了HTML的知识之后,觉得要自己单纯地去啃知识点有点枯燥,然后自己也很容易忘记,所以便找具体的网站练手便补上不懂的知识点.position:relative和postion:abso ...

  4. Springboot-shiro-redis实现登录认证和权限管理

    Springboot-shiro-redis实现登录认证和权限管理 在学习之前: 首先进行一下Apache Shiro和Shiro比较: Apache Shiro是一个功能强大.灵活的,开源的安全框架 ...

  5. 010 有顺序的Map的实现类:TreeMap和LinkedHashMap

    作者:nnngu GitHub:https://github.com/nnngu 博客园:http://www.cnblogs.com/nnngu 简书:https://www.jianshu.com ...

  6. JavaScript八张思维导图—基本概念

    JS基本概念 JS操作符 JS基本语句 JS数组用法 Date用法 JS字符串用法 JS编程风格 JS编程实践 不知不觉做前端已经五年多了,无论是从最初的jQuery还是现在火热的Angular,Vu ...

  7. iOS 注册页面 报错

    1.SpringBoard 无法启动应用程序(错误:-3) 方法:重启模拟器 2.

  8. Tomcat下的Server.xml配置文件详解

    自15年毕业到现在已经入行两年多了,一直以来没有深入的了解过tomcat的详细配置,只懂修改一下端口号.在网上找了些相关资料来支撑这篇文章,深入了解server.xml文件各配置的作用 <?xm ...

  9. 程序员之殇 —— One program, One king (血月)

    Are we living in the time of the end? (程序员的时代是否已经终结了?) 最近,我时常问自己这个问题. 刚读完了一个美国博士的论文,UDT (UDP-based D ...

  10. error: stray '\357' in program编程出错的总结

    错误: 编译报错:error: stray '\357' in program 原因:在程序中打入了全角字符   具体分析产生原因: 在编程中,由于打字的快速,按下ctrl键后紧接着按下了space键 ...