为了保持客户端和服务端之间的持久性连接的开发性,并且使用传输在这这样的连接上发送数据,这个用来访问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. Entity Framework 5.0系列之EF概览

    概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...

  2. 连接池技术 Connection Pooling

    原创地址:http://www.cnblogs.com/jfzhu/p/3705703.html 转载请注明出处 和数据库建立一个物理连接是一个很耗时的任务,所以无论是ADO.NET还是J2EE都提供 ...

  3. Java-集合练习题1

    第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...

  4. Atitit. 类与对象的存储实现

    Atitit. 类与对象的存储实现 1. 类的结构和实现1 2. 类的方法属性都是hashtable存储的.2 3. Class的分类 常规类(T_CLASS), 抽象类(T_ABSTRACT T_C ...

  5. 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)

    深度解析SDN——利益.战略.技术.实践(实战派专家力作,业内众多专家推荐) 张卫峰 编   ISBN 978-7-121-21821-7 2013年11月出版 定价:59.00元 232页 16开 ...

  6. salesforce 零基础开发入门学习(七)PickList的value值获取

    之前介绍过PickList类型的声明以及赋值,但是如何取出呢?一个sObject对象可以理解为一条数据.通过sObject直接取恐怕很难做到,因为他只会显示一个值.这时候就要用到Schema命名空间中 ...

  7. salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...

  8. POI生成WORD文档

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  9. Js 对 浏览器 的 URL的操作

    下面是一些实例: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...

  10. Android SDK 百度云盘分享链接

    SDK百度云盘地址: 链接: http://pan.baidu.com/s/1skSCplF 密码: drq4 使用说明: 这是Android开发所需的sdk,下载并解压后,将解压出的整个文件夹复制或 ...