C#实现SSE(Server-Sent Events)服务端和客户端

文章详细描述了如何使用C#的HttpListener和HttpClient库在服务端实现持续发送当前时间到客户端,以及客户端如何接收这些实时时间流的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

服务端不停发送当前时间。

服务端代码: 

using System;
using System.Collections.Generic;
using System.Net;
using System.Text;
using System.Threading;

namespace SSEserver
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpListener listener = new HttpListener();
            listener.Prefixes.Add("http://localhost:8080/");
            listener.Start();

            Console.WriteLine("Server is running...");

            while (true)
            {
                HttpListenerContext context = listener.GetContext();
                ThreadPool.QueueUserWorkItem((_) =>
                {
                    SendEvent(context);
                });
            }
        }

        static void SendEvent(HttpListenerContext context)
        {
            try
            {
                context.Response.ContentType = "text/event-stream";
                context.Response.StatusCode = 200;
                context.Response.Headers.Add("Cache-Control", "no-cache");
                context.Response.Headers.Add("Connection", "keep-alive");

                while (true)
                {
                    string message = $"data: {DateTime.Now.ToString("HH:mm:ss")}\n\n";
                    byte[] bytes = Encoding.UTF8.GetBytes(message);
                    context.Response.OutputStream.Write(bytes, 0, bytes.Length);
                    context.Response.OutputStream.Flush();
                    Thread.Sleep(1000); // 每秒发送一次消息
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }
            finally
            {
                context.Response.Close();
            }
        }
    }
}

客户端不停接收服务端发送的时间。

客户端代码: 

using System;
using System.IO;
using System.Net;
using System.Text;
namespace SSEclient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string url = "http://localhost:8080/sse_endpoint"; // SSE endpoint URL

            using (HttpClient client = new HttpClient())
            {
                var request = new HttpRequestMessage(HttpMethod.Get, url);
                request.Headers.Add("Accept", "text/event-stream");

                using (HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead))
                {
                    response.EnsureSuccessStatusCode();

                    using (var responseStream = await response.Content.ReadAsStreamAsync())
                    using (var reader = new System.IO.StreamReader(responseStream))
                    {
                        while (!reader.EndOfStream)
                        {
                            string line = await reader.ReadLineAsync();

                            if (!string.IsNullOrWhiteSpace(line))
                            {
                                Console.WriteLine(line);
                                // Handle the received SSE event here
                            }
                        }
                    }
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值