惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
爱范儿
爱范儿
P
Proofpoint News Feed
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Tailwind CSS Blog
J
Java Code Geeks
宝玉的分享
宝玉的分享
Jina AI
Jina AI
B
Blog
N
Netflix TechBlog - Medium
Recent Announcements
Recent Announcements
aimingoo的专栏
aimingoo的专栏
腾讯CDC
C
Check Point Blog
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - Franky
罗磊的独立博客
B
Blog RSS Feed
WordPress大学
WordPress大学
小众软件
小众软件
博客园 - 叶小钗
M
MIT News - Artificial intelligence
GbyAI
GbyAI

博客园 - 彭旭

VNC远程Gnome图形桌面(openEuler 20.03 LTS系统) [WPF]控件应用多个样式 [WCF]DomainServices客户端操作异常处理 [Silverlight]监听指定控件(FrameworkElement)的依赖属性(DependencyProperty)的更改 [Silverlight]键盘钩子KeyboardHook [Chrome扩展]屏蔽Google搜索结果重定向 Linq Distinct扩展 [Winform/C#]点击工作区域移动窗体 [WinForm] C#避免Panel(ScrollableControl)的子控件获取焦点时滚动条自动滚动 C#远程连接Oracle数据库(不安装客户端) RichTextBox.MouseWheel事件控制父控件Panel的内容滚动 ID3v1信息结构(MP3文件)的读取、修改(C#) 在线编辑Office文件 SQL优化 将自然数分解为若干连续的自然数 小写金额转换为大写金额 大数阶乘 查看文件夹大小及占用空间 VS2005开发WAP网站初识 - 彭旭 - 博客园
[ASP.NET MVC] Real-time之HTML5 服务器发送事件(server-sen...
彭旭 · 2016-04-18 · via 博客园 - 彭旭

最近有时间,打算看看SignalR,顺便了解一下Server Sent Events。

Controller

输出的数据格式为:data:[数据]\n\n。输出的数据尝试8000多字符也没问题,具体的上限就没试了。但是如果数据里也包含\n\n的话,数据就会被截断。

 1 public class HomeController : Controller
 2 {
 3     // GET: Home
 4     public ActionResult Index()
 5     {
 6         return View();
 7     }
 8 
 9     //Server-Sent Event
10     public void Sse()
11     {
12         Random random = new Random();
13 
14         //设置HTTP MIME 类型,不缓存页面
15         Response.ContentType = "text/event-stream";
16         Response.CacheControl = "no-cache";
17             
18         while (Response.IsClientConnected)
19         {
20             try
21             {
22                 string data = SseData(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " from http://www.cnblogs.com/ainijiutian/");
23                 Response.Write(data);
24                 Response.Flush();
25 
26                 System.Threading.Thread.Sleep(random.Next(500, 5000));
27             }
28             catch (Exception ex)
29             {
30                 System.Diagnostics.Debug.WriteLine(ex.Message);
31             }
32         };
33             
34         Response.End();
35         Response.Close();
36     }
37 
38     //SSE data
39     private string SseData(string data)
40     {
41         return "data:" + data + "\n\n";
42     }
43 }

View

 1 @{
 2     Layout = null;
 3 }
 4 
 5 <!DOCTYPE html>
 6 
 7 <html>
 8 <head>
 9     <meta name="viewport" content="width=device-width" />
10     <title>Index</title>
11 </head>
12 <body>
13     <div id="container"> 
14     </div>
15     <script>
16         if (typeof (EventSource) !== "undefined")
17         {
18             var container = document.getElementById("container");
19             var es = new EventSource("/home/sse");
20             es.onopen = function (event) {
21                 container.innerHTML += "open<br/>";
22             }
23             es.onmessage = function (event) {
24                 container.innerHTML += event.data + "<br/>";
25             };
26             es.onerror = function (event) {
27                 container.innerHTML += "error<br/>";
28                 es.close();
29             }
30         }
31         else
32         {
33             console.log("一边儿玩儿去");
34         }
35     </script>
36 </body>
37 </html>

运行如下: