专栏首页小神仙SignalR使用笔记

SignalR使用笔记

最近项目要求添加一个给用户发送消息的功能,就决定使用SignalR。翻到了以前学习SignalR的学习笔记,基本是官方文档的简版整理,便于快速阅览和实现。

1. nuget添加signalr引用:

a. install-package Microsoft.AspNet.SignalR

b. silverlight安装时startup中找不到IAppBuilder接口: Update-Package Owin -Reinstall

2. 新建hub集线器类

a. 添加调用客户端方法,调用的js方法在运行时解析,signalr将方法名称和参数值发送到客户端。如果客户端有与该名称匹配的方法,则调用该方法,并把参数值传递给该方法。如果没有找到匹配的方法,则不会报错。方法名称匹配不区分大小写。

i. js使用驼峰命名方式:第一个字母小写,调用服务端方法时会自动转换成c#命名方式(第一个字母大写)。指定集线器名称时,应该与客户端js调用方法名称一致。

1)

2)

b. 可以定义多个集线器。与在单个类中定义所有集线器功能相比,多个集线器没有性能差异。

c. 强类型集线器

i.

d. 客户端调用服务端方法与调用本地js方法相同,可以获取复杂类型的json格式返回值。

e. 同步/异步方法

i.
ii.
iii. js:

f. 异步调用客户端方法时,不会等待客户端方法执行完成,会继续执行下面的代码:

i.

g. 重载:如果要定义方法的重载,每个重载中的参数数必须不同。如果您通过指定不同的参数类型来区分重载,则Hub类将编译,但是当客户端尝试调用其中一个重载时,SignalR服务将在运行时抛出异常。

h. 从集线器方法调用报告进度(SignalR 2.1版本)。要实现进度报告,IProgress请为客户端可以访问的集线器方法定义一个参数:

i.

i. 调用客户端方法:

i.
ii.
iii. 不能从客户端方法中获取返回值,以下代码不起作用:

1)

iv. 字符串变量作为方法名称

1)

j. 获取连接的客户端:

i. 所有连接的客户端

1)

ii. 只有主叫客户端。

1)

iii. 所有客户端,除了主叫客户端。

1)

iv. 由连接ID标识的特定客户端。

1)

v. 所有连接的客户端,除了指定的客户端,由连接ID标识。

1)

vi. 指定组中的所有连接的客户端。

1)

vii. 指定组中的所有连接的客户端,除了指定的客户端,由连接ID标识。

1)

viii. 指定组中的所有连接的客户端,除了主叫客户端。

1)

ix. 由userId标识的特定用户。

1)

2) 默认情况下,这是IPrincipal.Identity.Name,但是可以通过向全局主机注册IUserIdProvider的实现来更改。

x. 连接ID列表中的所有客户端和组。

1)

xi. 组列表。

1)

xii. 按用户连接id。

1)

xiii. 用户名列表(在SignalR 2.1中引入)。

1)

k. 获取有关客户端的信息

i. 主叫客户端的连接ID。连接ID是由SignalR分配的GUID(您不能在自己的代码中指定值)。每个连接都有一个连接ID,如果应用程序中有多个Hub,则所有Hub都使用相同的连接ID。

1)

ii. HTTP标头数据。

1)

iii. 查询字符串数据。

1)

iv. Cookies

1)

v. 用户信息
vi. 请求的HttpContext对象

1)

3. 创建owin启动类

a.

b. 添加路由,如果要将SignalR功能添加到ASP.NET MVC应用程序,请确保在其他路由之前添加SignalR路由。

i.
ii. 指定URL的服务器代码。默认情况下,客户端用于连接到Hub的路由URL为“/ signalr”,该URL用于自动生成的JavaScript文件。

1)

2)

iii. 指定URL的JavaScript客户端代码(使用生成的代理)

1)

iv. 指定URL的JavaScript客户端代码(不带生成的代理)

1)

v. 指定URL的.NET客户端代码

1)

c. 如何自定义Hubs管道。SignalR使您可以将自己的代码注入Hub管道。以下示例显示了一个自定义集线器管道模块,用于记录从客户端接收的每个传入方法调用和在客户机上调用的传出方法调用:

i.
ii. 在Startup.cs文件中将模块注册到Hub管道中运行

1)

4. 添加html页面

a. 代码:

i.
ii.

5. 启用日志记录,在启动之前加上$.connection.hub.logging = true;

a.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NATS用Go入门实践

    NATS系统通常由具有nats或tls协议的标准URL标识,例如, NATS://demo.nats.io。NATS系统可以是单个服务器,小型集群或全局超级集群...

    陌无崖
  • CTF从入门到提升(十五)自包含

    1、Phpinfo()包含文件返回临时文件名,我们是在文件上传环节进行包含,如果不删除临时文件我们可以生成临时文件,

    牛油果
  • 如何通过爬虫爬取公众号的活跃度

    这篇文章主要来介绍下如何通过爬虫技术来爬取测试相关公众号的信息,接着通过对爬取的信息进行过滤处理给出测试公众号活跃度的一个列表。这里活跃度会以月发文的数量来进行...

    测试邦
  • CanHackMe | CTF平台搭建记录

    在Github上发现了一个开源的CTF平台,界面很好看,而且是php写的,所以决定搭建一下折腾折腾。

    天钧
  • 基于host的http代理--hproxy

    本文主要讲述,如何实现一个基于host方式的http代理,以及它与普通代理之间的区别。这种方式的代理主要可以应用于哪些实际的测试场景。

    上帝De助手
  • NATS多种连接Golang实践

    如果因为任何原因断开连接,大多数(如果不是全部)客户端库将重新连接到NATS系统。重新连接逻辑可能因库而异,因此请检查客户端库的文档。

    陌无崖
  • phar相关安全知识总结

    我是头回学习到phar RCE的相关知识,通过这次的SUCTF,通过复现大佬们所说的知识,发现了很多有意思的东西,过来记录一下,同时也总结了一些phar序列化的...

    用户5878089
  • 性能监控平台搭建 -- 集成Locust性能数据

    这是之前介绍过的性能监控平台的整体架构图,想要了解其它部分的搭建,可以查看相关文章《Telegraf安装与简易使用指南》、《InfluxDB安装与简易使用指南》...

    上帝De助手
  • TIOBE 9 月排行榜:Java没有悬念,PHP 正努力保住前十位置

    自 2001 年 TIOBE 指数开始以来, PHP 始终保持在榜单的前 10 位。它甚至是 2004 年 TIOBE 的年度编程语言。直到 2009 年底,一...

    奋斗蒙
  • Maven私服

    将备份的 /data/nexus-data 数据挂载到 nexus 镜像即可,注意版本的镜像环境变量

    suveng

作者介绍

精选专题

活动推荐

扫码关注云+社区

领取腾讯云代金券