signalr入门之持久性连接

hapgaoyi hapgaoyi     2022-08-18     406

关键词:

为了保持客户端和服务端之间的持久性连接的开发性,并且使用传输在这这样的连接上发送数据,这个用来访问SignalR持久性连接的底层API提供了一个隐藏底层固有复杂性的抽象层。

事实上,通过该API访问通信通道和在底层使用Socket方式类似:

在服务端,当连接打开或关闭、接受数据、给客户端发送信息时我们将被通知。在客户端,我们可以打开或关闭连接,发送或接受任何数据。与Socket一样,消息没有格式,可以说它的格式是传统数据格式——文本字符串。

从客户端来看,只需要发起一个到服务端的连接就可以立即使用它来发送数据,并通过SignalR调用的一个回调函数执行信息的接收。

从服务端来看,持久连接是继承自PersistentConnection的一个类,为了能够在某个事件产生时允许采取控制,可以对该类的一些方法进行重写。

每个持久连接都可以通过某个URL从外部进行访问。因此可以采用和其他框架,如 mvc、web api类似的一些方法。

接下来就是配置SignalR将每一个持久连接同其访问路径进行关联。

以前的SignalR版本必须通过global.asax执行相关的注册,但在2.0后都已经整合到OWIN中。

SignalR应用程序运行基于OWIN上的宿主进程中,该宿主程序将在应用程序的根名称空间查找一个为名Startup的类,然后执行它的Configuration方法。

首先在Web应用程序的根目录建立Startup类,

如:

 1 using System;
 2 using System.Threading.Tasks;
 3 using Microsoft.Owin;
 4 using Owin;
 5 
 6 [assembly: OwinStartup(typeof(Startup))]
 7 
 8 public class Startup
 9 {
10     public void Configuration(IAppBuilder app)
11     {
12  
13     }
14 }

 

上面的Configuration方法可以看成是启动方法,在该方法里可以建立相对应的SignalR连接和路径映射。

现在建立一个持久性连接类:TestConnection该类继承自PersistentConnection;当某些和服务以及和PersistentConnection类连接有关的事件产生时,将调用该类提供的虚方法,为了实现这样的逻辑,只需要重写相关方法即可。

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Threading.Tasks;
 5 using System.Web;
 6 using Microsoft.AspNet.SignalR;
 7 
 8 public class TestConnection : PersistentConnection
 9 {
10     protected override Task OnConnected(IRequest request, string connectionId)
11     {
12         return Connection.Send(connectionId, "Welcome!");
13     }
14 
15     protected override Task OnReceived(IRequest request, string connectionId, string data)
16     {
17         return Connection.Broadcast(data);
18     }
19 }

在TestConnection类中,有两个重写自PersistentConnection的方法:OnConnected 和OnRecevied,它们分别表示当有客户端连接时和当客户端发送消息服务端接收消息时。其实,在TestConnection中还可以重写其他方法,在这里默认是这两个。

这两个方法它们有request和connectId这两个共同的参数,request表示与请求相关的参数类似于asp.net中的Request,connectionId是一个字符串,表示客户端的唯一标识符,每个连接的客户端不同,connectionId就不一样。

 

在OnConnected这个方法中,

return Connection.Send(connectionId, "Welcome!");//表示向刚刚连接的客户端发送“welCome!”字符串消息,这个方法只对一个指定的用户发消息。connectionId就是客户端唯一标识符。


在OnRecevied这个方法中,

return Connection.Broadcast(data);//data是某一个客户端发送过来的消息,整个方法意思是向所有的客户端发送data消息。

signalr入门之多平台signalr服务端

之前创建SignalR服务端是基于Web应用程序而言的。那么能不能把SignalR服务端做成控制台应用程序、Winform或windows服务呢?答案是肯定的。之前尽管看起来好像是IIS和ASP.Net构成托管SignalR服务的唯一环境,但事实上并非如此,很多情... 查看详情

SignalR:没有持久通知的服务器广播

】SignalR:没有持久通知的服务器广播【英文标题】:SignalR:Serverbroadcastwithoutpersistingnotifications【发布时间】:2018-10-3004:45:33【问题描述】:我想通知在线用户一个新的聊天室已经创建。我不需要在离线用户上线后通知他们。我查... 查看详情

signalr系列教程:signalr快速入门

---恢复内容开始---本篇是SignalR系列教程的第一篇,本篇内容介绍了如何创建SignalR应用,如何利用SignalR搭建简易的聊天室等,本篇内容参考自:http://www.asp.net/signalr/overview/older-versions/tutorial-getting-started-with-signalr,文中会有我对实例代... 查看详情

singularity入门之持久化overlay(代码片段)

介绍在Singularity中运行容器,当容器退出时,对容器做的修改均会丢失,那怎么保存对容器的修改呢?此时我们可以通过Singularity的Overlay实现。Singularity的Overlay其实就是一个目录或文件系统镜像,其中保存着对... 查看详情

具有持久 HTTP 连接的 IDbConnection 生命周期管理

...012-10-2815:19:28【问题描述】:当我的ASP.NETMVC应用程序(如SignalR集线器)中存在持久HTTP连接时,我在管理具有范围为HttpContext的StructureMap的打开数据库连接的生命周期 查看详情

signalr学习记录-简介(代码片段)

SignalR简介什么是SignalR?ASP.NETSignalR是ASP.NET开发人员的库,可简化将实时web功能添加到应用程序的过程。 实时web功能使服务器代码能够在可用时立即将内容推送到连接的客户端,而不是让服务器等待客户端请求新的数据。Sign... 查看详情

signalr入门篇

...询技术来获取消息。可访问其官方网站:https://github.com/SignalR/ 获取更多资讯。 二,实现机制SignalR的实现机制与.NETWCF或Remoting是相似 查看详情

微服务之间的通讯安全-sentinel入门之规则持久化(代码片段)

规则持久化  现在我们配置的规则实际上是在内存中的,如果客户端应用配置中有控制台(dashboard),当流量经过客户端的时候,会把规则同步给控制台;同样当在控制台配置规则后,也会把规则推送给相应的客户端。规则都是存... 查看详情

okhttp3入门介绍之cookie持久化

参考技术A相关文章1、OkHttp3入门介绍:https://www.jianshu.com/p/af144d662bfd2、OkHttp3入门介绍之Cookie持久化:https://www.jianshu.com/p/23b35d403148本章主要从以下几个方面介绍:1、OkHttp3Cookie内置管理机制介绍2、基于本地存储的Cookie管理3、基... 查看详情

signalr全套系列之在.net6中实现signalr分组通信

【SignalR全套系列】之在.Net6中实现SignalR分组通信【SignalR全套系列】之在.Net6中实现SignalR分组通信 查看详情

http协议入门

简单的HTTP协议持久连接在HTTP/1.1中,所有的连接默认都是持久连接。管线化持久连接使得多数请求以管线化(pipelining)方式发送成为可能。以前发送请求后需要等待并受到响应,才能发送下一个请求。Cookie响应报文中,Set-Cookie... 查看详情

signalr2.1简单入门项目

概述  SignalR是通讯框架,前台Web页面与后台服务实现数据的交互。ASP.NETSignalR是一个为ASP.NET开发人员的库,简化了将实时web功能添加到应用程序的过程。实时Web功能使服务端代码推送内容到链接可客服端并立即应用成为可能... 查看详情

signalr全套系列之在.net6中实signalr通信

...如果觉得本公众号对您有帮助,欢迎关注]前文回顾【SignalR全套系列】之在.NetCore中实现WebSocket双工通信【SignalR全套系列】之在.NetCore中实现Server-SendEvents消息推送【SignalR全套系列】之在.NetCor 查看详情

springboot入门数据库访问之springdatajpa

本文记录学习使用springdatajpa访问数据库一什么是SpringDataJPA  JPA(JavaPersistenceAPI)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象、关联映射工具来管理Java应用中的关系数据。主要是为了简化现有的持久化开... 查看详情

sql入门经典之连接查询

上一篇介绍到查询。这一篇主要讲连接查询,将介绍INNERJOIN,OUTERJOIN(LEFT和RIGHT),FULLJOIN,CROSSJOIN。连接顾名斯义就是把多个数据表数据合并到一个结果集。用内部连接检索匹配的数据(innerjoin)连接结构语法如下:SELECT<columnlist>... 查看详情

如何终止 SignalR 连接?

】如何终止SignalR连接?【英文标题】:HowcanIkillaSignalRconnection?【发布时间】:2020-07-0403:33:22【问题描述】:我正在使用SignalR在网站上传输数据。但是SignalR应该只能在一段时间内发送数据,如果该时间段已过,则应终止连接。如... 查看详情

如何让 SignalR 连接尊重会话超时

】如何让SignalR连接尊重会话超时【英文标题】:HowtogetSignalRConnectiontoRespectSessionTimeout【发布时间】:2016-06-1315:20:59【问题描述】:使用SignalR,它旨在保持与Web服务器的长时间运行连接。但是,我有一个场景,在ASP.Net会话过期很... 查看详情

SignalR .Net Core 多连接

】SignalR.NetCore多连接【英文标题】:SignalR.NetCoreMultipleConnection【发布时间】:2020-08-1712:25:44【问题描述】:您好,我的应用程序后端是.NETCore,前端是Angular2+。我有一页,两个人既可以聊天又可以查看图表中的报告。我想用signalR... 查看详情