• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

使用SignalR实现asp.net服务器端的推送(ServerPush)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

我们在开发Web应用时,有时候需要将Server端的的信息Push到客户端。常见的一个场景就是微博应用,需要将一个用户的收听实时消息推送到Web端,也就是用户的更新用户的Timeline。

对此通用的解决方案就是Long Polling——支持XMLHttpRequest的浏览器都可以使用,使得其适用范围广。对此需要注意的就是Server端的处理能力,最好能用类似Node.js的Non-Block式的并发。GitHub有个项目SignalR使得的在asp.net中实现Server Side的Push变得简单。为了使用SignalR,我们需要在NuGet中搜索SignalR并安装。

安装完成后我们便可以使用SignalR了,我们先看Client端的实现:

服务器端也十分简单:

public class MicroBlogServer:Hub, IDisconnect { private static Dictionary<string, bool> cancelQueue = new Dictionary<string, bool>(); public void RefreshTimeline(string uid) { cancelQueue.Add(this.Context.ConnectionId, false); var msgTask = new Task(new Action<object>(PushUserMessage), uid); msgTask.Start(); } private void PushUserMessage(object uid) { while (true) { if (cancelQueue[this.Context.ConnectionId]) { cancelQueue.Remove(this.Context.ConnectionId); return; } string msg = GetNewMessage(uid.ToString()); Caller.newMessage(msg); //push new message to client string notice = GetSystemNotification(); if (!string.IsNullOrEmpty(notice)) Clients.notify(notice); } } public System.Threading.Tasks.Task Disconnect() { if (cancelQueue.Keys.Contains(this.Context.ConnectionId)) { cancelQueue[this.Context.ConnectionId] = true; } return null; } #region User Message Generator private string GetNewMessage(string uid) { Thread.Sleep(3000); return string.Format("message from xxx to {0} ({1})", uid, DateTime.Now); } private string GetSystemNotification() { if (new Random().Next(6) >= 5) return "system will shutdown for maintenance"; else return string.Empty; } #endregion }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
利用ASP.NET DataGrid显示主次关系的数据(c#版)发布时间:2022-07-10
下一篇:
Asp.net(C#)给图片加上水印效果发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap