一、指定通信方式

建立一个通讯方式需要一定的时间和客户机/服务器资源。如果客户机的功能是已知的,那么通信方式在客户端连接开始的时候就可以指定。下面的代码片段演示了使用AJAX长轮询方式来启动一个连接,将如果我们知道该客户端不支持其他的协议的话:

connection.start({ transport: 'longPolling' });

你可以指定一个替补方式,如果你想让客户端按照顺序尝试通讯方式的话.下面的代码片段展示了尝试使用WebSocket,如果失败直接使用长轮询。

connection.start({ transport: ['webSockets','longPolling'] });

指定将字符串常量定义如下:

  • webSockets

  • foreverFrame

  • serverSentEvents

  • longPolling

二、连接和集线器(Hubs)

SignalR API包括两种模型(用于客户端和服务端的通信):持久连接模型(Persistent Connections)和集线器(Hubs)模型

  一个连接代表一个简单的终结点(相当于单个收件人、被分组的、广播消息 而言)

持久连接API(在.NET代码中以PersistentConnection呈现),它使得开发人员便捷使用SignalR暴露的底层通讯协议

连接通信模型,对习惯于使用类似WCF的同学们比较熟悉.

  集线器模型是一个建立于连接API的高级管道.SignalR处理夸机器便捷的调度问题易如反掌,它使得客户端调用服务端的方法简单得犹如调用本地方法一样.反之亦然.

使用Hubs模型,或许对那些使用过.net remoting的人来讲就很容易理解了.使用Hub还可以让你对强类型参数方法、model绑定成为易事.

三、架构图

下面的架构图展示了Hubs和持久连接及潜在技术直接关系.

四、Hub如何工作

当服务器端代码调用客户端上的方法时,一个数据包会被传输在活跃的通信方式上,该通讯方式包含要调用的方法的名称和参数(当一个对象作为方法参数被传输时,把它序列化JSON)。然后客户端匹配方法的名字(客户端代码中定义的)。如果有匹配,该方法将会被执行.

我们可以用Fiddler.来监控方法的调用过程.下图展示了一个从服务端来的方法调用.

从Hub传来的方法叫做MoveShapeHub,将被调用的方法及叫做updateShape

在这个例子中,Hub的名字以H参数识别,方法名以M参数识别,传输的数据以A参数识别.

上面例子的代码:High-Frequency Realtime

五、如何选择通信模型呢?

大多数程序应该选择Hubs API.连接API可以在以下情形中使用:

  • 实际消息发送的格式需要被指定
  • 开发人员跟喜欢使用消息和调度模型
  • 一个已经存在的应用程序(它使用了消息模型)

SignalR简单实用_转自:https://www.cnblogs.com/humble/p/3851205.html的更多相关文章

  1. SignalR要求_转自:https://www.cnblogs.com/humble/p/3855137.html

    SignalR 服务端组件可以被部署在诸多的服务器配置中,本节描述了它所支持的操作系统版本,.NET framework,IIS.以及其他组件 二.支持的服务器操作系统 SignalR服务端组件可以被 ...

  2. SignalR的几种方式_转自:https://www.cnblogs.com/zuowj/p/5674615.html

    SignalR有三种传输模式: LongLooping(长轮询). WebSocket(HTML5的WEB套接字). Forever Frame(隐藏框架的长请求连接), 可以在WEB客户端显式指定一 ...

  3. Postgresql 简单安装过程. Study From https://www.cnblogs.com/stulzq/p/7766409.html

    CentOS 下面安装 Postgresql. 的简要学习记录 1. 卸载CentOS上面自带的postgresql版本 rpm -e $(rpm -qa|grep postgre) 2. postg ...

  4. C#_简单实用的翻页

    简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...

  5. LogCook 一个简单实用的Android日志管理工具

    众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...

  6. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  7. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论 SignalR 简单示例 通过三个DEMO学会SignalR的三种实现方式 SignalR推送框架两个项目永久连接通讯使用 SignalR 集线器简单实例2 用SignalR创建实时永久长连接异步网络应用程序

    SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论   异常汇总:http://www ...

  8. Java注解的基本概念和原理及其简单实用

      一.注解的基本概念和原理及其简单实用 注解(Annotation)提供了一种安全的类似注释的机制,为我们在代码中添加信息提供了一种形式化得方法,使我们可以在稍后某个时刻方便的使用这些数据(通过解析 ...

  9. .NET 跨平台RPC框架DotNettyRPC Web后台快速开发框架(.NET Core) EasyWcf------无需配置,无需引用,动态绑定,轻松使用 C# .NET 0配置使用Wcf(半成品) C# .NET Socket 简单实用框架 C# .NET 0命令行安装Windows服务程序

    .NET 跨平台RPC框架DotNettyRPC   DotNettyRPC 1.简介 DotNettyRPC是一个基于DotNetty的跨平台RPC框架,支持.NET45以及.NET Standar ...

随机推荐

  1. there is no route defined for key Agreement(react native bug记录)

    调试react native的项目有一个报错: there is no route defined for key XXXX 它发生在我调试TabNavigator选项卡路由器的时候,我把如下代码的A ...

  2. QTableWidget数据表格

    void setRowHeight(int row, int height); //行高 void setVerticalHeaderLabels(const QStringList &lab ...

  3. 谈一谈做iOS播放器库开发所涉及的知识点

    在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家iOS游戏渠道公司去做游戏支付业务的SDK开发,我的iOS正式开发生涯就这么开始了. 在那家iOS游戏渠道没做上一年 ...

  4. 【转】Anaconda安装与使用

    PS:这还是17年一次数据挖掘训练营使用的软件 [转至]https://blog.csdn.net/m0_37605642/article/details/98726766 安装和配置 1.在官网或清 ...

  5. python协程详解,gevent asyncio

    python协程详解,gevent asyncio 新建模板小书匠 #协程的概念 #模块操作协程 # gevent 扩展模块 # asyncio 内置模块 # 基础的语法 1.生成器实现切换 [1] ...

  6. Kotlin星投影与泛型约束详解

    星投影(star projection): 继续来学习Kotlin泛型相关的东东,星投影(star projection),这是个啥东东呢?下面先来说一下概念: 1.对于Star<out T&g ...

  7. [唐胡璐]Selenium技巧 - 利用MonteScreenRecorder录制视频

    我们可以用以下方式在Selenium Webdriver中capture video. 基本步骤: 从 http://www.randelshofer.ch/monte/,下载“MonteScreen ...

  8. 关于devexpress报表XtraReport,动态修改报表样式(.repx格式),动态添加数据并使用的理解

    一.基本概念: XtraReports 中的每个报表都由 XtraRepot 类的一个实例表示,或者由该类的子类来表示(这种情况更常见). 因此,每个报表都作为带区的容器使用,而每个带区中都包含报表控 ...

  9. Linux系统 安装JDK和tomcat

    下载文件路径包: http://archive.apache.org/dist/ 首先将软件包上传到/tmp目录下 需要文件如下 jdk-8u60-linux-x64.gz apache-tomcat ...

  10. [JSOI2015]最大公约数

    题意:给一个序列a[1],a[2],a[3]...a[n],求其中连续的子序列A[L],A[L+1],...,A[R],使其权值 W(L,R)=(R-L+1)×gcd(A[L],...,A[R])最大 ...