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

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

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

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

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

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

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

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

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

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

如:

 using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin; [assembly: OwinStartup(typeof(Startup))] public class Startup
{
public void Configuration(IAppBuilder app)
{ }
}

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

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

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.SignalR; public class TestConnection : PersistentConnection
{
protected override Task OnConnected(IRequest request, string connectionId)
{
return Connection.Send(connectionId, "Welcome!");
} protected override Task OnReceived(IRequest request, string connectionId, string data)
{
return Connection.Broadcast(data);
}
}

在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入门之持久性连接的更多相关文章

  1. SignalR入门之小试身手

    建立好持久性连接类TestConnection之后,现在为我们的SignalR程序配置持久性连接类以及访问路径. 进入刚刚建立的Startup类,进入Configuration这个方法里来配置: us ...

  2. SignalR入门之从外部访问持久性连接或Hub

    有的时候,需要从外部访问持久性连接或Hub服务. 比如,假设A和B两个客户端正在聊天,那么系统或第三方在不参与聊天的情况需要为他们发送系统消息,那么此时,就需要独立来访问持久性连接或Hub服务. 之前 ...

  3. SignalR入门之Hub

    在持久性连接的基础上,SignalR提供了一个更高层次的抽象层:Hub,基于javascript的灵活性和C#的动态特性,Hub是一个至关重要的开发模式,它消弭了客户端和服务端这两个独立的物理环境之间 ...

  4. SignalR入门之多平台SignalR服务端

    之前创建SignalR服务端是基于Web应用程序而言的.那么能不能把SignalR服务端做成控制台应用程序.Winform或windows服务呢? 答案是肯定的. 之前尽管看起来好像是IIS和ASP. ...

  5. [置顶] MVC中使用signalR入门教程

    一.前言:每次写总要说一点最近的感想 进入工作快半年了,昨天是最郁闷的一天,我怀疑我是不是得了"星期一综合征",每个星期一很没有状态.全身都有点酸痛,这个可能一个星期只有周末才打一 ...

  6. SignalR 入门 .netCore实现聊天室

    SignalR 入门 .netCore实现聊天室 本文根据微软SignalR 简介 | Microsoft Docs 和 ASP.NET Core SignalR 简介 | Microsoft Doc ...

  7. LVS负载均衡之持久性连接介绍(session篇)

    在实际生产环境中,往往需要根据业务应用场景来设置lvs的会话超时时间以及防session连接丢失的问题提,如在业务支付环节,如若session丢失会导致重复扣款问题,严重影响到安全性,本小节解将会讲到 ...

  8. SignalR入门一、通过 SignalR 2 进行实时聊天

    一:什么是signalR Asp.net SignalR是微软为实现实时通信的一个类库.一般情况下,signalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务 ...

  9. ASP.NET SignalR入门

    前言 之前在培训ASP.NET WebAPI的时候有提过SignalR这个技术,但当时只是讲了是用来做什么的,并没有多说.因为自己也是画图找资料的时候见到的.后来当一直关注的前端大神贤心发布LayIM ...

随机推荐

  1. Wix 安装部署教程(十一) ---QuickWix

    这次发布的是这两天做的一个WIX工具QuickWIX,主要解决两个问题点1.对大文件快速生成wix标签(files,Directories,ComponentRef):2.比较前后两次工程的差异.大的 ...

  2. 通过分析iframe和无阻塞脚本关系能让我们更懂iframe

    在我上篇文章里,我提到一种使用iframe完成无阻塞脚本加载的方式,因为我对iframe的偏见很大,所以上篇文章里我没有展开讨论这个问题. 文章发表后有位网友问了我这样一个问题,下面是他问题的原文,如 ...

  3. 系统架构:Web应用架构的新趋势---前端和后端分离的一点想法

    最近研究servlet,看书时候书里讲到了c/s架构到b/s架构的演变,讲servlet的书都很老了,现在的b/s架构已经不是几年前的b/s架构,其实b/s架构就是web应用开发,对于这样的架构我们现 ...

  4. RabbitMQ(六)远程连接

    RabbitMQ(六)远程连接 默认情况下,rabbitmq使用`guest`来连接本地(localhost)的server,当需要远程连接时,就会失效. "guest" user ...

  5. Atitit.rsa密钥生成器的attilax总结

    Atitit.rsa密钥生成器的attilax总结 1.1. 密钥生成器 1 1.2. 生成固定的密钥 2 1.2.1. 设置或重置 SecureRandom 对象的随机数种子 2 1.3. 密钥结构 ...

  6. paip.提升性能--多核cpu中的java/.net/php/c++编程

    paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http ...

  7. 快速入门系列--JMeter压测工具

    今天的年会已过,仍然是空手而归,不过俺坚信能让生活稳定永远都是努力.由于隔壁组负责年会的抢红包项目,因而趁此机会把通过工具模拟高并发的知识补了补,通过和身边大师的交流,总算是对压力测试有了个简要的了解 ...

  8. ssh(sturts2_spring_hibernate) 框架搭建之hibernate2

    一.今天要进行解答的是对上次hibernate1进行进一步的完善,这次第一是进一步使用spring注入一个SessionFactory实例,避免了自己new实例:第二是应用数据库池(c3p0). 二. ...

  9. 汇编程序的Hello world

    原文链接:http://www.orlion.ga/989/ 一.汇编程序的Hello world x86 AT&T: .data   msg:       .ascii "Hell ...

  10. 引入CSS

    前面的话 Web早期,HTML是一种很有限的语言,这种语言不关心外观,它只是一种简洁的小型标记机制.随着Mosaic网页浏览器的出现,网站开始到处涌现.对于页面改变外观的需求增加,于是增加了类似< ...