一.前言:每次写总要说一点最近的感想
二:什么是SignaIR
Asp.NET SignalR是微软为实现实时通信的一个类库。一般情况下,SignalR会使用JavaScript的长轮询(long polling)的方式来实现客户端和服务器通信,随着HTML5中WebSockets出现,SignalR也支持WebSockets通信。另外SignalR开发的程序不仅仅限制于宿主在IIS中,也可以宿主在任何应用程序,包括控制台,客户端程序和Windows服务等,另外还支持Mono,这意味着它可以实现跨平台部署在Linux环境下。
SignalR内部有两类对象:
- Http持久连接(Persisten Connection)对象:用来解决长时间连接的功能。还可以由客户端主动向服务器要求数据,而服务器端不需要实现太多细节,只需要处理PersistentConnection 内所提供的五个事件:OnConnected, OnReconnected, OnReceived, OnError 和 OnDisconnect 即可。
- Hub(集线器)对象:用来解决实时(realtime)信息交换的功能,服务端可以利用URL来注册一个或多个Hub,只要连接到这个Hub,就能与所有的客户端共享发送到服务器上的信息,同时服务端可以调用客户端的脚本。SignalR将整个信息的交换封装起来,客户端和服务器都是使用JSON来沟通的,在服务端声明的所有Hub信息,都会生成JavaScript输出到客户端,.NET则依赖Proxy来生成代理对象,而Proxy的内部则是将JSON转换成对象。
SignalR将整个信息的交换封装起来,客户端和服务器都是使用JSON来沟通的,在服务端声明的所有Hub信息,都会生成JavaScript输出到客户端,.NET则依赖Proxy来生成代理对象,而Proxy的内部则是将JSON转换成对象。
客户端和服务端的具体交互情况如下图所示:(看不懂此图没关系,写完例子再看就会有新的体会)
三:SignaIR入门简单的例子
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using Microsoft.AspNet.SignalR;
- using Microsoft.AspNet.SignalR.Hubs;
- using System.Data;
- using System.Threading.Tasks;
- namespace SignaIREasyDemo
- {
- public class ServerHub : Hub
- {
- public void SendMsg(string message)
- {
- //调用所有客户端的sendMessage方法
- Clients.All.sendMessage(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),message);
- }
- }
- }
- using Microsoft.Owin;
- using Owin;
- [assembly: OwinStartup(typeof(SignalRQuickStart.Startup))]
- namespace SignalRQuickStart
- {
- public class Startup
- {
- public void Configuration(IAppBuilder app)
- {
- // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
- // 配置集线器
- app.MapSignalR();
- }
- }
- }
6.在Control 里新建一个Chat Action方法,在Chat视图里代码如下:
- @{
- ViewBag.title = "SignaIR聊天窗口";
- }
- <div class="container">
- <input type="text" id="message" />
- <input type="button" id="sendmessage" value="Send" />
- <input type="hidden" id="displayname" />
- <ul id="messageBox"></ul>
- </div>
- @section scripts
- {
- <script src="~/Scripts/jquery.signalR-2.2.1.min.js"></script>
- <script src="~/signalr/hubs"></script>
- <script>
- $(function () {
- //引用自动生成的集线器代理
- var chat = $.connection.serverHub;
- //定义服务器调用的客户端sendMessage来显示新消息
- chat.client.sendMessage = function (name, message)
- {
- //向页面添加消息
- $("#messageBox").append('<li><strong style="color:green">'+htmlEncode(name)+'</strong>:'+htmlEncode(message)+'</li>');
- }
- //设置焦点到输入框
- $('#message').focus();
- //开始连接服务器
- $.connection.hub.start().done(function () {
- $('#sendmessage').click(function () {
- //调用服务器端集线器的Send方法
- chat.server.sendMsg($('#message').val());
- //清空输入框信息并获取焦点
- $("#message").val('').focus();
- })
- })
- });
- //为显示的消息进行html编码
- function htmlEncode(value)
- {
- var encodeValue = $('<div/>').text(value).html();
- return encodeValue;
- }
- </script>
- }
- <script src="~/signalr/hubs"></script>
- //<span style="font-family: Verdana, Arial, Helvetica, sans-serif;font-size:12px; line-height: 24px;">重写OnConnected 方法</span>
- public override Task OnConnected()
- {
- System.Diagnostics.Trace.WriteLine("客户端连接成功!");
- return base.OnConnected();
- }
一个简单的如何使用SignaIR就是这么多,用法很广泛,用的人也挺多的,所以值得学习。下一步准备在Xamarin android 中也写一个聊天的例子。希望能完整一点吧。下载地址:http://download.csdn.net/detail/kebi007/9683942
本博客Android APP 下载 |
![]() |
支持我们就给我们点打赏 |
![]() |
支付宝打赏 支付宝扫一扫二维码 |
![]() |
微信打赏 微信扫一扫二维码 |
![]() |
如果想下次快速找到我,记得点下面的关注哦!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!