中使用signalr_微软日记 [1]SignalR&Benchmark Testing

最近在帮助Redmond的team做一些上线的工作,在这段时间接触了SignalR和关于SignalR的工具,并根据组里的需求对工具进行修改用于更为精准的测试。这段时间主要是在和上海的SignalR team和Redmond team进行对接。

如果我们想创建一个聊天室,我们应该做一些什么基础知识?

首先,需要一个前端界面,来从用户端收集消息,展示服务端返回的消息,其次,需要自行设计一种方法,来使得消息能够准备的传达到其他客户端的界面。在本科大三的时候,写过一个半双工的命令行聊天室。服务端需要建立 socket 来监听指定的地址,然后等待客户端来连接。而客户端则需要建立 socket 并与服务端的 socket 地址进行连接。

什么是SignalR?

在涉及高并发量的情况下,对消息进行处理,限流,转发将会成为大问题,signalR作为一个开源库,能够使得开发者能够专注在主要逻辑的开发上,而无需担心通信的问题。

目前SignalR里常用的通信方式分为:WebSocket, LongPolling, ServerSentEvents

维基百科介绍:

Websocket:WebSocket是一种与HTTP不同的协议。两者都位于OSI模型的应用层,并且都依赖于传输层的TCP协议。服务器可以通过标准化的方式来实现,而无需客户端首先请求内容,并允许消息在保持连接打开的同时来回传递。通过这种方式,可以在客户端和服务器之间进行双向持续对话。

Websocket的优点:

  • 1、较少的控制开销,相比较于HTTP请求更小的包头。
  • 2、全双工的协议带来了更强的实时性,服务器可以在无需客户端请求的情况下进行响应,即主动与客户端进行通信,能够在更短的时间内进行更多次数的数据传递。
  • 3、Websocket保持连接的特性使得其作为一种有状态的协议,能够在建立通信之后省略部分状态信息,类似于token或者session。
  • 4、Websocket能够进行更加广泛的扩展和自定义协议。

ServerSentEvents:在通常情况下,HTTP协议无法做到服务器主动推送信息,但是可以通过服务端向客户端申请流信息来进行变通。服务器发送的是持续的数据流,而客户端也同时保持连接,等待着源源不断的数据流。在这种情况下,能够使得服务器能够持续的向客户端推送消息。

SSE相比较于Websocket,有如下一些特征:只能进行单向的沟通,websocket更加的强大和灵活,所以SSE更像是从远端下载数据。

SSE的优点:

  • 1、本质上是HTTP协议,能够普适大多数的服务场景。
  • 2、更加的轻量级,更简单的使用方式。
  • 3、支持断线重连,而websocket需要自己实现。

关于Longpolling,可以参考 这篇文章。

接下来主要介绍一下使用signalR服务的基础架构。

在这次的项目里,US team主要使用了signalR来传输notification和图片,因此每次传输消息的payload size在2k-1MB之间,因此对时延的要求非常严格。这张图表明了用户(Client)与远端服务器(App Server),SignalR service(ASRS)之间的关系。

8a8c1866835ad50efda36f7b2c55fcce.png

首先,用户会与APP Server进行negotiate,在这个过程里,APP server会对Client发送的消息携带Token和DeviceID进行鉴权(在这个过程中,其实涉及到了跨区的问题,暂且不表),在App server鉴权成功后,会将ASRS的地址和connection string返回给客户端。客户端之后会拿着ASRS地址和connection string去连接ASRS服务器,ASRS也会与App server建立起长连接。至此,完成了整个连接的构建过程。之后Client不会再与App server产生直接连接。

在消息发送阶段,逻辑如下,Client和ASRS保持的双工长连接使得client能够发送消息到ASRS,之后ASRS会将消息转发到App server,App server会根据发送消息的逻辑来决定将消息发回Client或者转发给其他人,在实现中是根据PartnerID来确定转发的人选,并将消息转回给ASRS,由ASRS进行消息的转发操作。

在这个过程中,signalR提供了服务端的SDK,使得我们在构建项目的时候,不需要去考虑连接过程和转发过程,发送消息的操作均由SDK开放的接口来完成,开发者能够专注在自身业务的逻辑实现上。

此外,此项目也支持远端过程调用(RPC),每个client在ASRS注册了自己的连接与接受消息方法之后,ASRS便能够根据他们的partnerID来准确的转发消息了。

在下一章节,我们将使用SignalR的原生开源测试工具 benchmark 来进行测试,深入了解该测试工具并根据项目的不同来对benchmark进行修改,进行不同的测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值