当前位置: 首页 > news >正文

c#客户端请求 Server-Sent Events

方式1 WebClient 

 private void WebClientTest()
 {
     WebClient web = new WebClient();
     web.OpenReadCompleted += Web_OpenReadCompleted;
     web.OpenReadAsync(new Uri("http://localhost:30009/api/event/get"));
 }
 private void Web_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
 {
     using (var sr = new StreamReader(e.Result))
     {
         string line;
         while ((line = sr.ReadLine()) != null)
         {
             Console.WriteLine(line);
         }
     }
 }

方式2  HttpClient 

private async void Test3()
{
    string url = "http://localhost:30009/api/event/get";
    using (HttpClient client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/event-stream"));

        using (HttpResponseMessage response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
        {
            response.EnsureSuccessStatusCode();

            using (Stream stream = await response.Content.ReadAsStreamAsync())
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                while (!reader.EndOfStream)
                {
                    string line = await reader.ReadLineAsync();
                    if (!string.IsNullOrWhiteSpace(line))
                    {
                        Console.WriteLine($"收到数据: {line}");

                        //try
                        //{
                        //    var jsonData = JObject.Parse(line);
                        //    if (jsonData["data"] != null)
                        //    {
                        //        Console.WriteLine($"解析内容: {jsonData["data"]}");
                        //    }
                        //}
                        //catch (Exception ex)
                        //{
                        //    Console.WriteLine($"JSON 解析错误: {ex.Message}");
                        //}
                    }
                }
            }
        }
    }
}

方式2 Post请求的SSE

 public async void Test1()
 {
     var reaquest = new ChatResquest();
    
     var client = new HttpClient();
     var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:30009/api/postsse/sseendpoint")
     {
         Content = new StringContent(JsonConvert.SerializeObject(reaquest, Formatting.Indented), Encoding.UTF8, "application/json") // SSE一般不用请求体,但POST方法需要一个Content
     };

     var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
     var stream = await response.Content.ReadAsStreamAsync();

     using (var reader = new System.IO.StreamReader(stream))
     {
         while (!reader.EndOfStream)
         {
             var line = await reader.ReadLineAsync();
             if (!string.IsNullOrWhiteSpace(line))
             {
                 Console.WriteLine($"Received: {line}");
             }
         }
     }
 }

相关文章:

  • 音视频开发面试准备
  • Python组合数据类型(二)
  • Python字典,集合
  • Linux 网络:skb 数据管理
  • WEB实时推送消息的7种方式
  • 开发常用软件
  • C++设计模式-抽象工厂模式:从原理、适用场景、使用方法,常见问题和解决方案深度解析
  • Python 构建Flask网页端远程控制Windows系统功能
  • 基于Ollama平台部署的Qwen大模型实现聊天机器人
  • 计算机考研C语言
  • Docker搭建Redis哨兵模式【一主两从三哨兵】
  • 《TCP/IP网络编程》学习笔记 | Chapter 17:优于 select 的 epoll
  • 面试之《commonjs,requirejs和es6 Module的区别》
  • Photo Works在线图片编辑器:一键修复老照片,轻松焕新记忆
  • java-单列模式-final-枚举
  • 「 DelegateUI 」Ant-d 风格的 Qt Qml UI 套件
  • 瑞芯微RK3576(1)-硬件设计
  • 浙江大学:DeepSeek行业应用案例集(153页)(文末可下载PDF)
  • python-docx库的run._element.get_or_add_rPr()方法详解
  • Adobe Firefly 技术浅析(三):GANs 的改进
  • 贵州黔西市游船倾覆事故致9人死亡1人失联
  • 印度扩大对巴措施:封锁巴基斯坦名人账号、热门影像平台
  • 严正交涉!我驻日使馆:如日方采取新的挑衅举动,中方必坚决反制
  • 英国传统两党受挫地方选举后反思,改革党异军突起“突破想象”
  • 申活观察|人潮涌动成常态,豫园为何常来常新?
  • 云南省政协原党组成员、秘书长车志敏接受审查调查