ABP理论学习之SignalR集成

摘要:
返回到通用目录此目录描述了您自己的SignaR代码的安装、连接和内置功能介绍###Abb.Web.SignalR使在基于ABP的应用程序中使用SignalR变得非常容易。

返回总目录


本篇目录

介绍###

Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易。查看SignalR文档获取更多关于SignalR的详细信息。

安装###

服务端

Abp.Web.SignalRnuget包安装到你的项目中(一般是web层),然后给你的模块添加一个依赖:

[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安装到你的web项目中。

客户端

在页面上应该添加abp.signalr.js脚本。它位于Abp.Web.Resources包中(在启动模块中已经安装了)。我们应该在signalr总线之后包含它:

<script src="http://t.zoukankan.com/~/signalr/hubs"></script>
<script src="http://t.zoukankan.com/~/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.connected”。当该连接成功建立时,你可以注册到该事件以采取相应行动。

内置功能###

你可以在应用程序中使用SignalR的所有功能,此外,Abp.Web.SignalR包实现了一些内置的功能。

通知

Abp.Web.SignalR包实现了 IRealTimeNotifier来向客户端发送实时通知(查看《通知系统》)。因此,你的用户可以获得实时的推送通知。

在线客户端

ABP提供了IOnlineClientManager来获取关于在线用户的信息(比如,注入IOnlineClientManager然后使用GetByUserIdOrNull, GetAllClients, IsOnline 方法 )。为了能够正确地工作,IOnlineClientManager需要一个通讯基础设施。Abp.Web.SignalR提供了一个这样的基础设施。因此,如果安装了SignalR,那么在应用的任何层都可以注入并使用IOnlineClientManager。

PascalCase vs. camelCase

Abp.Web.SignalR包在序列化时使用CamelCasePropertyNamesContractResolver覆盖了SignalR默认的 ContractResolver。因此,我们在服务端的类具有 PascalCase属性,而在客户端作为 camelCase使用来发送/接收对象(因为在javascript中camelCase是更受人喜欢的命名)。如果你想在某些程序集中忽略这个,那么你可以将那些程序集添加AbpSignalRContractResolver.IgnoredAssemblies 列表中。

你自己的SignaR代码###

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注册到依赖注入系统中(你可以基于你的需求使它是单例的【singleton】)。我们也使用属性注入了session和logger。

SendMessage是hub的一个方法,它可以被客户端使用。在这个方法中,我们可以调用所有客户端的 getMessage函数。正如你看到的那样,我们可以使用AbpSession来获得当前的用户id(如果用户登录了系统)。为了演示,我们也重写了 OnConnected 和 OnDisconnected,实际这里是不需要的。

这里,客户端的javascript代码使用了我们的集线器hub发送/接收信息。

var chatHub = $.connection.myChatHub; //获取 hub的引用

chatHub.client.getMessage = function (message) { //为即将到来的信息注册
    console.log('received message: ' + message);
};

abp.event.on('abp.signalr.connected', function() { //为连接事件注册
chatHub.server.sendMessage("Hi everybody, I'm connected to the chat!"); //给服务器发送信息
});

然后,无论何时需要向服务器发送信息,我们都可以使用chatHub。这里再提醒一下,想要获取更多关于SignalR的信息,可以点击查看SinalR文档

免责声明:文章转载自《ABP理论学习之SignalR集成》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何为你的代码选择一个开源协议网络_01 基本配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

远程访问及控制

一:配置服务端 添加测试账号,aaa 1:服务监听选项 [root@localhost ~]# setenforce 0 注意:如果不关闭selinux,不能修改端口号 [root@localhost ~]# vi /etc/ssh/sshd_config 修改      17 Port 22                 \监听的端口      19...

ISCSI共享存储

ISCSI网络磁盘    默认端口:3260 服务端: 一. 二.安装软件:targetcli 用命令targetcli进行配置------------------------进入iscsi磁盘配置模式   1.建立backstore后端存储     >>>  backstores/block create  name=nsd  dev=...

转载:SQL注入演示demo

网上看到的一个SQL注入的演示demo,很完整所以转载过来,分享给大家。先要感谢作者!!   作者:潘良虎链接:http://www.zhihu.com/question/22953267/answer/80141632来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Web安全简史在Web1.0时代,人们更多是关注服务器端...

基于Abp VNext框架设计

abp 通过IDistributedEventBus接口集成自IEventBus实现分布式事件消息的发布订阅。 IEventBus在什么时机触发PublishAsync? 当前UnitOfWork完成时,触发IEventBus的PublishAsync 在没有事务环境下,同步调用IEventBus的PublishAsync abp 默认实现基于Ra...

MQTT协议的简单介绍和服务器的安装

转:http://blog.csdn.net/djun100/article/details/25752491   最近公司做的项目中有用到消息推送,经过多方面的筛选之后确定了使用MQTT协议,相对于XMPP,MQTT更加轻量级,并且占用用户很少的带宽。 MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议,可以连接大量的远程传感器...

全网NFS存储架构详解与分析

全网NFS存储架构详解与分析   在企业集群架构的工作场景中,NFS网络文件系统一般用来存储共享视频、图片、附件等静态资源文件,一般是网站用户上传的文件都放在NFS共享里,例如播客产品的图片、附件、头像、注意网站程序不要放在NFS共享里,然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源,所以NFS是当前中小型互联网架构中最常用的数据...