原文:一步一步学习SignalR进行实时通信_4_Hub

一步一步学习SignalR进行实时通信\_4_Hub

SignalR


前言

之前我们介绍了SignalR有2级抽象,前2篇文章我们讲的是较底层PersistentConnection,从这篇文章开始我们学习下较高一层的Hub。

创建Hub

创建Hub的方法和创建PersistentConnection非常类似

  1. public class EchoHub:Hub
  2. {
  3. //这是Hub
  4. }
  1. public class EchoPersistentConnection:PersistentConnection
  2. {
  3. //这是PersistentConnection
  4. }

配置Hub

学过了PersistentConnection,那么Hub更加不是难事

  1. public void Configuration(IAppBuilder app)
  2. {
  3. // 映射 persistent connections 到/myconnection
  4. app.MapSignalR<MyPersistentConnection>("/myconnection");
  5. // 映射 hubs 默认为"/signalr"
  6. app.MapSignalR();
  7. //映射Hubs到"/realtime",同时还可以配置HubConfiguration,比如我们uxyao跨域,和上一讲用法是一致
  8. app.MapSignalR("/realtime", new HubConfiguration());
  9. }

创建Hubs服务

接下来我们进入正题,如何来创建基于Hub的实时通信服务,这里与PersistentConnection有一点差别,前面我们在服务器通过OnReceived()来接受客户端的服务并进行处理,在Hub中我们可以实现我们自己需要的方法来进行处理信息。

1. 新建一个Hub类取名为MyFirstHub



2. 默认会生成这样的代码,有一个默认的方法,应该能看得出来这个Hello()方法的功能是发送给有客户端信息,说的更直白一点是所有连接了此Hub的客户端即为Clients,服务器会发送请求调用客户端的hello()方法,类似于PersistentConnection的广播Broadcast()。



3. 创建一个客户端连接

* 我创建一个html页面名为Hub,引入jquery和signalr的js

* 在页面载入的时候连接Hub服务,并调用Hello,向所有客户端打招呼

详细代码

  • startup映射
  1. using Microsoft.Owin;
  2. using Owin;
  3. [assembly: OwinStartup(typeof(SignalR_3_Hubs.Startup))]
  4. namespace SignalR_3_Hubs
  5. {
  6. public class Startup
  7. {
  8. public void Configuration(IAppBuilder app)
  9. {
  10. app.MapSignalR();
  11. }
  12. }
  13. }
  • MyFirstHub
  1. using Microsoft.AspNet.SignalR;
  2. namespace SignalR_3_Hubs.Models
  3. {
  4. public class MyFirstHub : Hub
  5. {
  6. public void Hello(string name)
  7. {
  8. Clients.All.hello(name);
  9. }
  10. }
  11. }
  • hub.html
  1. <!DOCTYPE html>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <title></title>
  5. </head>
  6. <body>
  7. <ul id="chat"></ul>
  8. <button id ="sayHello">发送</button>
  9. <script src="Scripts/jquery-1.10.2.min.js"></script>
  10. <script src="Scripts/jquery.signalR-2.0.0.min.js"></script>
  11. <script src="/signalr/js"></script>
  12. <script type="text/javascript">
  13. $(function () {
  14. //创建一个hub服务
  15. var hub = $.connection.myFirstHub;
  16. $.connection.hub.start()
  17. .done(function () {
  18. alert("连接成功!");
  19. })
  20. .fail(function () {
  21. alert("连接失败!");
  22. });
  23. hub.client.hello = function (name) {
  24. $('#chat').append('<li><strong>' + name + '</strong>:Hi!</li>');
  25. }
  26. $("#sayHello").click(function () {
  27. console.log(1);
  28. hub.server.hello("Jack");
  29. console.log(2);
  30. });
  31. });
  32. </script>
  33. </body>
  34. </html>

代码解析

这3端代码非常简短也很简单,但是有一点特别要注意的是,我们用PersistentConnetcion在startup中配置SignalR映射时

startup中映射的代码为app.MapSignalR("/echo");

在html客户端js代码中我们是这样写的

var connection = $.connection("/echo");

若通过跨域其他客户端连接则为var connection = $.connection("127.0.0.1:8083/echo");(假设signalR部署在127.0.0.1:8083端口)

这在前面2章我都讲到过,Hub与PersistentConnection有所不同,Hub的默认服务是映射在/signalr/js或/signalr/hubs

因此如果我们默认hub映射代码为app.MapSignalR();

那么我们需要在html引入<script src="/signalr/js"></script>或者<script src="/signalr/hubs"></script>,否则服务将无法开启



我改为<script src="/signalr/></script>那么就报了404错误并提示你是否引用正确。

如果我将映射改为app.MapSignalR("/realtime");

那么引入的代码就应该是<script src="/realtime/signalr/js"></script>或者<script src="/realtime/signalr/hubs"></script>

这下应该明白了吧,前面的映射代表的是映射的根目录。同时你不用奇怪这个路径,这只是个虚拟路径,服务开启后生成的代理(在后面我会讲到代理和非代理的使用),可以看到下载下来的脚本资源文件



到此Hub的整个过程应该有些了解了

效果展示

  1. 进入页面

  2. 点击按钮触发

结束语

这里简单的介绍了下Hub,并通过与PersisentConnection进行了比较。下一节将具体的介绍Hub。

源码下载

本文发布至作业部落

参考文献

SignalR Programming in Microsoft ASP.NET pdf 下载

一步一步学习SignalR进行实时通信_4_Hub的更多相关文章

  1. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  2. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  3. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  4. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

  5. 一步一步学习SignalR进行实时通信_5_Hub

    原文:一步一步学习SignalR进行实时通信_5_Hub 一步一步学习SignalR进行实时通信\_5_Hub SignalR 一步一步学习SignalR进行实时通信_5_Hub 前言 Hub命名规则 ...

  6. 一步一步学习SignalR进行实时通信_6_案例

    原文:一步一步学习SignalR进行实时通信_6_案例 一步一步学习SignalR进行实时通信\_6_案例1 一步一步学习SignalR进行实时通信_6_案例1 前言 类的定义 各块功能 后台 上线 ...

  7. 一步一步学习SignalR进行实时通信_3_通过CORS解决跨域

    原文:一步一步学习SignalR进行实时通信_3_通过CORS解决跨域 一步一步学习SignalR进行实时通信\_3_通过CORS解决跨域 SignalR 一步一步学习SignalR进行实时通信_3_ ...

  8. 一步一步学习SignalR进行实时通信_2_Persistent Connections

    原文:一步一步学习SignalR进行实时通信_2_Persistent Connections 一步一步学习SignalR进行实时通信\_2_Persistent Connections Signal ...

  9. 12.Linux软件安装 (一步一步学习大数据系列之 Linux)

    1.如何上传安装包到服务器 有三种方式: 1.1使用图形化工具,如: filezilla 如何使用FileZilla上传和下载文件 1.2使用 sftp 工具: 在 windows下使用CRT 软件 ...

随机推荐

  1. uboot相关命令及用法

    进入uboot时,在命令行上敲“?” ,回车就会打印出在uboot里可用的命令: #??       - alias for 'help'base    - print or set address ...

  2. 接口(三)——JAVA的多重继承

    一.接口的作用 ①.为了能够向上转型为多个基类型 ②.防止客户端程序员创建该类的对象——同抽象类 二.通过继承扩展接口 interface Monster{ void menace(); } inte ...

  3. 关于ajax发送的数据问题

    今天在做保存富文本编辑器的内容时,发送了一个ajax请求: $.ajax({ type:"POST", url:"{% url 'cms:add' %}", d ...

  4. 【配置】如何配置Tp-link无线路由器作为无线交换机

    最近刚装了电信天翼宽带,谁知道现在只能装光猫.你说一个4M带宽有必要用光猫么?装好之后问题来了,这个光猫很奇葩,只有一个以太网接口,确有内置有路由功能,也就是只有一个出口的路由器.现在问题来了:我想接 ...

  5. Linux下编译安装qemu和libvirt

    目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3  ...

  6. 深入理解MFC子类化

    子类化,通俗来讲就是用自己的窗口处理函数来处理特定消息,并将自己其他消息还给标准(默认)窗口处理函数.在SDK中,通过SetWindowLong来指定一个自定义窗口处理函数:SetWindowLong ...

  7. 【LeetCode练习题】Next Permutation

    Next Permutation Implement next permutation, which rearranges numbers into the lexicographically nex ...

  8. 使用ashx一般处理程序,读取不到Session的问题

    一般的处理程序文件里面是用不了Session的,必须得实现Session接口才可以用. public class RandomCode : IHttpHandler, System.Web.Sessi ...

  9. 网站服务管理系统wdcp简介及功能特性

    WDCP是WDlinux Control Panel的简称,是一套用PHP开发的Linux服务器管理系统以及虚拟主机管理系统,,旨在易于使用Linux系统做为我们的网站服务器,以及平时对Linux服务 ...

  10. 分享一个用安卓手机就能引导pc安装linux系统办法

    1.首先安卓手机下载软件DriveDroid.apk http://pan.baidu.com/s/1qW4pbT6 2.下载linux镜像文件放手机存储卡存储,放到Download/images/以 ...