基本信息
源码名称:服务器向客户端网页实时推送数据例子
源码大小:0.99M
文件格式:.zip
开发语言:C#
更新时间:2015-11-10
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
需要先还原相关 nuget包,然后再使用,具体方法是:右键解决方案>>管理nuget包>>打开后 点击还原缺少的包即可
需要先还原相关 nuget包,然后再使用,具体方法是:右键解决方案>>管理nuget包>>打开后 点击还原缺少的包即可
using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Threading; using System.Web; using System.Web.Http; using ServerSentEvent4Net; namespace ServerSentEventsTest.Controllers { public class SSEController : ApiController { private static readonly Lazy<Timer> _timer = new Lazy<Timer>(() => new Timer(TimerCallback, null, 0, 1000)); private static readonly Lazy<ServerSentEvent<InfoAboutSubscriber>> SSE = new Lazy<ServerSentEvent<InfoAboutSubscriber>>(() => { var sse = new ServerSentEvent<InfoAboutSubscriber>(10, true, 5000); sse.SubscriberAdded = SSE_SubscriberChanged; sse.SubscriberRemoved = SSE_SubscriberChanged; return sse; }); static void SSE_SubscriberChanged(object sender, SubscriberEventArgs e) { ClientsController.Send(e.SubscriberCount.ToString()); } public HttpResponseMessage Get(HttpRequestMessage request) { Timer t = _timer.Value; return SSE.Value.AddSubscriber(request, new InfoAboutSubscriber("both")); } public HttpResponseMessage Get(string filter) { Timer t = _timer.Value; return SSE.Value.AddSubscriber(this.Request, new InfoAboutSubscriber(filter)); } private static void TimerCallback(object state) { Random randNum = new Random(); int num = randNum.Next(30, 100); SSE.Value.Send(num.ToString(), info => { if (info != null) { bool isOdd = (num % 2) == 1; switch (info.Filter) { case InfoAboutSubscriber.MessageFilter.Both: return true; case InfoAboutSubscriber.MessageFilter.Odd: return isOdd; case InfoAboutSubscriber.MessageFilter.Even: return !isOdd; } } return false; }); //To set timer with random interval _timer.Value.Change(TimeSpan.FromMilliseconds(randNum.Next(1, 3) * 500), TimeSpan.FromMilliseconds(-1)); } private class InfoAboutSubscriber { public enum MessageFilter { Both, Odd, Even } public InfoAboutSubscriber(string filter) { if (String.Compare(filter, "odd", true) == 0) this.Filter = MessageFilter.Odd; else if(String.Compare(filter, "even", true) == 0) this.Filter = MessageFilter.Even; else this.Filter = MessageFilter.Both; } public MessageFilter Filter { get; private set; } } } }