最近项目要求添加一个给用户发送消息的功能,就决定使用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.

SignalR使用笔记的更多相关文章

  1. SignalR学习笔记(二)高并发应用

    虽然SignalR借助Websocket提供了很强大的实时通讯能力,但是在有些实时通讯非常频繁的场景之下,如果使用不当,还是会导致服务器,甚至客户端浏览器崩溃. 以下是一个实时拖拽方块项目的优化过程 ...

  2. SignalR学习笔记(五) 横向扩展之SQL Server

    当一个Web应用程序达到一台服务器能力限制,即请求处理数量限制之后,有2种解决方案:纵向扩展和横向扩展. 纵向扩展即用更强的服务器(或虚拟机),或为当前的服务器添加更多的内存,CPU等 横向扩展即添加 ...

  3. SignalR学习笔记(三)Self-Host

    SignalR可以借助Owin摆脱对IIS的依赖,实现Self-Host,使得SignalR有了部署在非Windows平台的可能. 什么是Owin Owin的英文全称是Open Web Interfa ...

  4. .net Signalr 使用笔记

    官方参考地址:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host 1.服务器端可以是控制台.winfor ...

  5. SignalR学习笔记(四) 性能优化

    限制消息发送次数 这种方式在学习笔记(二)-  高并发应用中介绍过,在客户端和服务器端使用定时器来减少消息发送的次数 减少消息数据的大小 服务器端,可以使用JsonIgnore, 来忽略不需要序列化的 ...

  6. SignalR学习笔记(一) 简单聊天室

    什么是ASP.NET SignalR? ASP.NET SignalR是一个方便程序员添加实时网络通信功能的类库.所谓的实时网络通信功能(Real-time Web Functionality)就是需 ...

  7. Asp.net SignalR 初试和应用笔记一 认识和使用 SignalR

    如果你在用QQ,微信.你会知道,广告和消息无处不在.也有好的一面,比如通过QQ或微信,微博等及时聊天功能,你找到了你的初恋,你找到了小学的班级等等. 这里的及时通信在很多应用场所能用到,比如: 1.球 ...

  8. Asp.Net Core SignalR 与微信小程序交互笔记

    什么是Asp.Net Core SignalR Asp.Net Core SignalR 是微软开发的一套基于Asp.Net Core的与Web进行实时交互的类库,它使我们的应用能够实时的把数据推送给 ...

  9. ASP.NET MVC SignalR 简单聊天推送笔记

    介绍:(抄袭于网络) ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指这样一种功能:当所连接 ...

随机推荐

  1. 任务调度--spring下的任务调度quartz

    之前写过Timer实现任务调度,这篇文章用来写一下在spring下使用quartz实现任务调度,直接上代码: 定义任务对象: package com; /** * 1. 定义任务对象 * * @aut ...

  2. MongoDB与python交互

    1.Pymongo PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式.官方文档 2.安装 进入虚拟环境 sudo pip install pymon ...

  3. java语言为什么能跨平台

    参考https://blog.csdn.net/woailuo453786790/article/details/51660015 因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一 ...

  4. Golang错误和异常处理的正确姿势

    Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...

  5. java 判断是否为中文字符,部分,。中文符号不能识别

    public static void main(String[] args) { int i = 0; for (char c : ",.判断一个字符串是否有中文一般情况是利用Unicode ...

  6. java日志文件用法总结

    1.基本概念 日志门面(接口):commons logging ; slf4j ; 日志具体实现:log4j ; logback(Spring 系列在使用) ; log4j2(添加了异步logger的 ...

  7. koa+mysql+vue+socket.io全栈开发之数据访问篇

    后端搭起大体的框架后,接着涉及到的就是如何将数据持久化的问题,也就是对数据库进行 CURD 操作. 关于数据库方案, mongodb 和 mysql 都使用过,但我选用的是 mysql,原因: 目前为 ...

  8. 浏览器加载 CommonJS 模块的原理与实现

    就在这个周末,npm 超过了 cpan ,成为地球上最大的软件模块仓库. npm 的模块都是 JavaScript 语言写的,但浏览器用不了,因为不支持 CommonJS 格式.要想让浏览器用上这些模 ...

  9. .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)

    上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...

  10. 从壹开始微服务 [ DDD ] 之十 ║领域驱动【实战篇·中】:命令总线Bus分发(一)

    烽火 哈喽大家好,老张又见面了,这两天被各个平台的“鸡汤贴”差点乱了心神,博客园如此,简书亦如此,还好群里小伙伴及时提醒,路还很长,这些小事儿就随风而去吧,这周本不打算更了,但是被群里小伙伴“催稿”了 ...