集线器Hub类

使用持久连接类去开发是有些困难的,因为基于事件的开发方式,我们可以进行操作的地方也仅仅只是OnReceived事件内,这有些像websocket的方式。我们迫切的需要一种更人性化,更为适用的开发方式。

集线器就是我们想要的,集线器是对持久连接类再一次的进行封装,集线器类都继承自Hub,集线器类可以让我们使用RPC的方式进行交互。

创建一个集线器类也是非常简单的

这时我们需要对Startup类进行一些改造了,这更为简单只需要一行代码就可以实现

app.MapSignalR();

到源码可以看到,它实际上给了我们一个默认的path,如果不想要的话也可以自定义path,这都是很简单的

app.MapSignalR("/simpleHub", new HubConfiguration());

现在创建了一个HubDemo的集线器类,代码如下,HelloService是服务器的方法而helloClient是客户端的方法

public class HubDemo : Hub
{
public void HelloService()
{
Clients.All.helloClient();
}
}

到了前端,除了要引用jq和signalR之外还需要引用一下我们的集线器,可以看到这是有一定规律的  /simpleHhub 是MapSignalR的Path,后面是/js。这是什么意思呢?

在应用程序运行后,HubDemo这个类会代理成js,路径就在simpleHub/js 。可以运行看一下

<script src="/simpleHub/js"></script>

这个js就是辅助我们进行RPC方式调用的一个核心成员,有兴趣的同学可以研究一下生成的js

下面我们从连接中拿到hubDemo这个集线器类,然后定义客户端的 helloClient方法。因为后面我们的服务器会调用这个函数。

然后我们打开连接,连接完成后调用服务器的 helloService方法,还记得在helloService函数里调用了客户端的helloClient函数。所以运行起来应该是会看到打印的内容

<script type="text/javascript">
let hubDemo = $.connection.hubDemo; hubDemo.client.helloClient = function () { console.log("收到服务器的问候");
} $.connection.hub.start().done(function () {
hubDemo.server.helloService();
});
</script>

现在看起来是很好用,但是也会造成困扰,因为代理生成的js只会在应用程序启动后生成,在之前是没有这个js文件的。也是就我们在开发的时候引入的只是一个虚拟的目录文件,这会带来什么问题呢,会导致我们的IDE没有智能的提示,像$.connection.hubDemo这种东西是点不出来的。还会有更大的困扰,每次修改hub类后还要再把项目运行起来才可以,按照编程习惯应该是生成项目就已经OK才对,这一系列问题都需要我们换一种方式

<script src="/simpleHub/js"></script>

所幸在nuget上有一个叫Microsoft.AspNet.SignalR.Utils的包,我们可以把它下载下来,打开可以看到它是一个.exe的可执行文件。这时候就需要配置我们的Visual Studio一起协同工作了

在项目上右键属性,找到生成事件,然后编辑后期生成事件

语法是  {signalr.exe的地址} ghp /path:{项目bin的地址} /o:{js文件输出的地址}

下面是生成到项目下的Scripts文件夹下文件名为 hubDemo.js

$(SolutionDir)\packages\Microsoft.AspNet.SignalR.Utils.2.2.1\tools\signalr.exe ghp /path:$(TargetDir) /o:$(ProjectDir)\Scripts\hubDemo.js

这个时候生成项目就可以看到文件了,再把它引入到我们的项目中,那自然是一点问题也没有

Asp.Net SignalR Hub集线器的更多相关文章

  1. Asp.Net SignalR Hub中的上下文对象

    Hub中的 Context 使用了集线器后,会发现对比持久连接类少了OnConnectioned这样的事件,事实上是有的.需要我们去override .这下似乎发现了什么问题,记得持久连接类中有con ...

  2. Asp.Net SignalR Hub类中的操作详解

    Hub类中的操作 在服务端我们要通过Hub类做一系列操作,下面就说说我们都可以做什么操作 客户端的发送消息操作 调用所有的客户端的helloClient方法 Clients.All.helloClie ...

  3. ASP.NET Core SignalR:集线器Hubs

    一.什么是集线器hubs 通过SignalR的集线器hubs中定义的方法,服务器可以调用连接中的客户端定义的方法,而客户端也可以调用服务器端集线器中定义的方法.SignalR负责实现了客户端和服务器之 ...

  4. asp.net signalR 专题—— 第四篇 模拟RPC模式的Hub操作

    在之前的文章中,我们使用的都是持久连接,但是使用持久连接的话,这种模拟socket的形式使用起来还是很不方便的,比如只有一个唯一的 OnReceived方法来处理业务逻辑,如下图: protected ...

  5. C# -Asp.Net.SignalR.Core之Hub

    前言 程序员的进步是需要环境的,良好的团队环境,良好的开发环境,会让人进步的更加快速. 所以,我认为,如果一个程序员,在2019年还在用Visual Studio 2005开发,那么,他,大概率,不会 ...

  6. ASP.NET SignalR

    何为ASP.NET SignalR,有什么用 ASP.NET SignalR是一个ASP.NET库,是为了实现实时web通信而创造的,能让服务器与客户端实现即时通信,而不需要服务器等待接收到客户端请求 ...

  7. [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门

    一.前言 之前半年时间感觉自己有点浮躁,导致停顿了半年多的时间没有更新博客,今天重新开始记录博文,希望自己可以找回初心,继续沉淀.由于最近做的项目中用到SignalR技术,所以打算总结下Asp.net ...

  8. 《ASP.NET SignalR系列》第二课 SignalR的使用说明

    从现在开始相关文章请到: http://lko2o.com/moon 接续上一篇:<ASP.NET SignalR系列>第一课 认识SignalR (还没有看的话,建议您先看看) 一.指定 ...

  9. [ASP.NET] 使用 ASP.NET SignalR 添加实时 Web

    ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接的客户端变得可用时服务 ...

随机推荐

  1. 小白的学习之路(hello wold!)

    Hello word ! 一直想写博客,但是都拖延了,正好两天有假期就开始弄这个事情了.开始觉得写博客也没有什么,一路学习以来都是看别人的博客进行学习,也收藏了不少博客,学到了不少东西,所以我觉的博客 ...

  2. Unity-修改Debug日志文本颜色

    Unity开发过程中Debug信息是非常重要的,但是千篇一律的白色字符不能迅速找出想要的信息,添加些字体颜色是个很好的办法,比如: AppDebug.Log("<color=#ff84 ...

  3. select2使用小结

    做项目考虑到使用的便捷,要用到select2,就研究了一下,做个小结,防止忘记.本文内容是建立在NFine框架上的,使用的MVC三层架构.本人很少写文章,学习的知识也过少,不知道能不能表达准确,如有错 ...

  4. MicroSoft CryptoAPI data/file encrypt/decrypt

    linux 用第三方库 Crypto++, 还未实战. CryptoAPI使用两种密钥:会话密钥与公共/私人密钥对.会话密钥使用相同的加密和解密密钥,这种算法较快,但必须保证密钥的安全传递.公共/私人 ...

  5. Linux系统下,在文件中查找某个字符串

    在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车. Vim会跳转到第一个匹配.按下n查找下一个,按下N查找上一个. Vim查找支持正则表达式,例如/vim$匹配行尾的" ...

  6. 网页加水印 svg 方式

    /** *网页加水印 svg 方式 * * @export * @param {*} [{ * container = document.body, * content = '请勿外传', * wid ...

  7. 马昕璐 201771010118《面向对象程序设计(java)》第十五周学习总结

    第一部分:理论知识学习部分 JAR文件:将.class文件压缩打包为.jar文件后,使用ZIP压缩格式,GUI界面程序就可以直接双击图标运行. 既可以包含类文件,也可以包含诸如图像和声音这些其它类型的 ...

  8. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  9. git如何避免push/pull时输入密码

    今天在搭建git服务器的时候,一切顺利,但是就是在git push的时候老是要输入密码,太烦了,然后百度搜索了一下,总结了主要有如下三种方法: 方法1 git config --global cred ...

  10. [LeetCode] Advantage Shuffle 优势洗牌

    Given two arrays A and B of equal size, the advantage of A with respect to B is the number of indice ...