Web实时通信,SignalR真香,不用愁了

Web实时通信,SignalR真香,不用愁了
最新回答
思念成灾*

2020-08-17 02:36:54

Web实时通信中SignalR的优势与应用

SignalR是一个开源的库,跨平台,它极大地简化了Web应用与其他应用之间的通讯。Web服务端可以实时地将内容推送给对应的客户端,同时客户端发送的信息也可以实时地传达给其他客户端。SignalR提供了一种远程过程调用(RPC)的方式,使得客户端可以调用服务器的方法,同样在服务器端的方法中也能调用客户端的方法。

一、SignalR的通信方式

SignalR支持多种方式实现实时通信,包括:

  • WebSockets:一种在单个TCP连接上进行全双工通信的协议,使得服务器和浏览器的通信更加简单,服务端可以主动发送信息。
  • Server-Sent Events(SSE):与WebSocket作用相似,都是建立浏览器与服务器之间的通信渠道,然后服务器向浏览器推送信息。但WebSocket是双向的,而SSE是单向的。
  • Long Polling(长轮询):和传统的轮询原理一样,只是服务端不会每次都返回响应信息,只有有数据或超时了才会返回,从而减少了请求次数。

SignalR会自动选择服务器和客户端能力范围内的最佳通信方式,当然也可以手动指定。

二、SignalR的应用场景

SignalR在Web模式下的实时通信场景中表现出色,包括但不限于:

  • 服务端主动推送信息:如发送公告场景。
  • 监控或看板数据实时显示:如监控系统实时展示分布到各个客户端上的数据。
  • 服务端和客户端交互:如客服系统的聊天场景。

三、SignalR的使用案例

  1. SignalR服务端

    创建一个WebAPI项目,并引入对应的Nuget包。

    编写自己的SignalR Hub。Hub是一个类,里面编写的方法客户端可以远程调用,同样在服务端也可以远程调用客户端的方法,这样就使得实时通信变得简单便捷。

    在Startup.cs文件中注册相关服务及管道。

    编写业务API,如模拟消息推送,方便演示。

  2. JS客户端

    获取signalr封装好的js文件,可以使用npm进行安装。

    编写index.html,引入Vue和axios的js文件,并编写关键脚本逻辑。

    运行并演示推送效果。

    此外,SignalR还支持其他类型的客户端,如WinForm客户端和Java客户端,只需按照相应的方式进行配置和编写代码即可。

  3. WinForm客户端

    在窗体中布局一个文本框用于显示消息。

    编写核心代码,实现与服务端的通信。

    运行并查看效果。

  4. 客户端主动上报数据信息

    在很多场景中,客户端需要主动上报数据,并实时显示到其他客户端或数据看板。这可以通过服务器转发来实现,因为客户端之间没有建立连接,只有服务器知道有多少客户端已连接。

    在服务端自定义的Hub中增加一个方法,用于接收客户端上报的数据。

    在客户端中调用服务端的方法,并传递更新的信息。

    服务端接收到数据后,调用其他客户端的方法,将信息实时显示。

四、SignalR的通信流程

  • 服务端推送消息

    Js客户端点击发布按钮调用API接口。

    接口内部将信息交给SignalR处理。

    SignalR获取所有客户端,并通过远程调用客户端方法的方式将信息传递给客户端,最后信息就可以实时展示了。

  • 客户端上报数据

    在客户端(如窗体客户端)中点击按钮,内部调用服务端的更新数据方法。

    服务端被调用之后,内部获取所有客户端,并调用客户端中的更新数据方法。

    客户端接收到数据后,将信息展示。

SignalR以其便捷性和高效性,在Web实时通信领域发挥着重要作用。无论是服务端主动推送信息,还是客户端主动上报数据,SignalR都能提供稳定且实时的通信服务。通过简单的配置和编写代码,开发者可以轻松实现各种实时通信功能,满足项目的需求。