SignalR

1、signalR简介
signalR 是一个开源的库,跨平台;可以让web应用与其他应用通讯变得非常简单,WEB服务端可以实时的将内容推送给对应的客户端,客户端发送的信息也可以实时到其他客户端。
signalR 提供了一种远程过程调用(RPC)的方式,使得客户端可以调用服务端的方法,同样在服务端的方法中也能调用刻画短的方法。

1.1signalR的通信方式
SignalR 支持如下的方式实时通信:

websockets:
是一种在单个TCP连接上进行全双工通信的协议,使得服务器和浏览器的通信更加简单,服务端可以主动发送信息。

Server-Sent Events:
SSE 与 WebSocket 作用相似,都是建立浏览器与服务器之间的通信渠道,然后服务器向浏览器推送信息。websocket 是双向,而 SSE是单向的。

Long Polling(长轮询):
和传统的轮序原理一样,只是服务端不会每次都返回相应信息,只有有数据或超时了才会返回,从而减少了请求次数。

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

1.2 SignalR的应用场景
其实对于Web模式下的实时通信,SignalR用上试试
服务端主动推送信息;比如发送公告场景。
监控或看板数据实时显示;比如监控系统实时展示分布到各个客户端上的数据
服务端和客户端交互;比如客服系统的聊天场景。

三:SignaIR入门简单的例子

这才是重点,以上的介绍大家肯定对Asp.net signalR有了一个初步的了解,接下我们开始实践操作了。

先来看一下最终要实现的效果图吧:

1.新建一个MVC项目,我用的是Vs2015默认添加的是MVC5

2."引用" 右键点击 》管理Nuget程序包》搜索signalR,添加完signalR你可以在 Scripts 文件夹下看到:

3.向项目中添加一个signalR集线器(V2)命名为ServerHub:

4.在刚刚新建的ServerHub.cs 中写入 一下代码:

 
  1. using System;

  2. using System.Collections.Generic;

  3. using System.Linq;

  4. using System.Web;

  5. using Microsoft.AspNet.SignalR;

  6. using Microsoft.AspNet.SignalR.Hubs;

  7. using System.Data;

  8. using System.Threading.Tasks;

  9. namespace SignaIREasyDemo

  10. {

  11. public class ServerHub : Hub

  12. {

  13. public void SendMsg(string message)

  14. {

  15. //调用所有客户端的sendMessage方法

  16. Clients.All.sendMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),message);

  17. }

  18. }

  19. }

5.如果你是vs2015 的话添加的mvc项目 不进行身份验证的那种吧,必须得添加一个 Startup 类.       如果没有这个类,请添加,不然的话项目运行不起来的,具体代码如下:

 
 
  1. using Microsoft.Owin;

  2. using Owin;

  3. [assembly: OwinStartup(typeof(SignalRQuickStart.Startup))]

 
 
  1. namespace SignalRQuickStart

  2. {

  3. public class Startup

  4. {

  5. public void Configuration(IAppBuilder app)

  6. {

  7. // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888

  8. // 配置集线器

  9. app.MapSignalR();

  10. }

  11. }

  12. }


6.在Control 里新建一个Chat Action方法,在Chat视图里代码如下:

 
 
  1. @{

  2. ViewBag.title = "SignaIR聊天窗口";

  3. }

  4. <div class="container">

  5. <input type="text" id="message" />

  6. <input type="button" id="sendmessage" value="Send" />

  7. <input type="hidden" id="displayname" />

  8. <ul id="messageBox"></ul>

  9. </div>

  10. @section scripts

  11. {

  12. <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>

  13. <script src="~/signalr/hubs"></script>

  14. <script>

  15. $(function () {

  16. //引用自动生成的集线器代理

  17. var chat = $.connection.serverHub;

  18. //定义服务器调用的客户端sendMessage来显示新消息

  19. chat.client.sendMessage = function (name, message)

  20. {

  21. //向页面添加消息

  22. $("#messageBox").append('<li><strong style="color:green">'+htmlEncode(name)+'</strong>:'+htmlEncode(message)+'</li>');

  23. }

  24. //设置焦点到输入框

  25. $('#message').focus();

  26. //开始连接服务器

  27. $.connection.hub.start().done(function () {

  28. $('#sendmessage').click(function () {

  29. //调用服务器端集线器的Send方法

  30. chat.server.sendMsg($('#message').val());

  31. //清空输入框信息并获取焦点

  32. $("#message").val('').focus();

  33. })

  34. })

  35. });

  36. //为显示的消息进行html编码

  37. function htmlEncode(value)

  38. {

  39. var encodeValue = $('<div/>').text(value).html();

  40. return encodeValue;

  41. }

  42. </script>

  43. }

好了,一个signalR简单的入门的例子就ok了,最终的效果图在上面也已经看到了。下面我们就简单的分析一下吧

从最终的效果图 我们可以看到,在任何一个web 页面中发送的消息所有的 页面都会接收到该消息。这种应用在IM系统非常广泛常见。

当然signalR并不局限于这种B/S模式的消息推送,在C/S 同样也能应用,目前我们公司xamarin android所用的就是这个signalR实现的PC之间、PC与移动端、移动端与移动端之间的交流,使用之后会发现的确挺方便的。

有人可能感觉很郁闷了,在视图中引入 这段js有什么作用?也并有写啊。

注意!,这是虚拟目录,也就是你在OWIN Startup中注册的地址
<script src="~/signalr/hubs"></script>

其实在服务器端声明的所有Hub信息,最终都会生成JavaScript输出到客户端,其实谷歌浏览器中F12 ,在Sources你就可以看到写的源代码了:

还是来看一下在这种B/S 模式中 signalR是如何运行的吧。首先程序开始的时候,Web页面就已经与signalR的服务建立连接。

$.connection.hub.start() 意思就是有signalR服务建立连接

.done 函数表示连接成功后为发送的按钮绑定一个单击事件

发送消息的方法:chat.server.sendMsg($('#message').val())

在ServerHub重写一个 OnConnected 方法来监控客户端的连接情况,的确程序运行的时候web页面就已经开始建立连接了,在调试的时候可以在输入中看到 "客户端连接成功!"

       //重写OnConnected 方法
 
  1. public override Task OnConnected()

  2. {

  3. System.Diagnostics.Trace.WriteLine("客户端连接成功!");

  4. return base.OnConnected();

  5. }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SignalR是一个开源的实时通信框架,它可以在客户端和服务器之间建立双向通信的连接。而SignalR WebSocket是SignalR框架中的一种传输方式,它基于WebSocket协议,提供了更高效、更实时的双向通信能力。 使用SignalR WebSocket可以实现以下功能: 1. 实时更新:服务器可以主动向客户端推送数据,实现实时更新的功能。 2. 即时聊天:多个客户端之间可以实时进行双向通信,实现即时聊天的功能。 3. 实时监控:服务器可以实时向客户端发送监控数据,客户端可以实时展示监控信息。 4. 实时通知:服务器可以向客户端发送通知,客户端可以及时收到并进行相应处理。 SignalR WebSocket的工作原理如下: 1. 客户端通过WebSocket协议与服务器建立连接。 2. 服务器通过SignalR框架接收和处理客户端的请求。 3. 服务器可以主动向客户端推送数据,也可以响应客户端的请求。 4. 客户端通过SignalR框架接收和处理服务器的响应或推送数据。 SignalR WebSocket具有以下特点: 1. 跨平台:SignalR WebSocket可以在多种平台上使用,包括.NET、Java、JavaScript等。 2. 自动重连:当连接断开时,SignalR WebSocket会自动尝试重新建立连接。 3. 可靠性:SignalR WebSocket具有自动重连和错误处理机制,可以保证通信的可靠性。 4. 扩展性:SignalR WebSocket可以与其他技术和框架结合使用,实现更复杂的功能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值