HttpClient 使用(二)流式请求

打印 上一主题 下一主题

主题 1859|帖子 1859|积分 5577

原文地址:https://www.cnblogs.com/ysmc/p/18780674
  比年AI风靡全球,我们日常见到的最多的就是跟AI聊天,极大减少了我们的搜索时间,不过各人也要注意甄别AI回答的正确性,身体不舒服照旧老老实实看医生。
  AI聊天的输出是逐字输出的,有些小伙伴就很好奇这个是怎么实现的,比力简朴的就是SSE,高级点的是WebSocket,本文我们先讲一下SSE。
SSE

Server-Sent Events,基于 HTTP 协议的推送技术,服务器可以向目的持续推送数据,与 WebSocket 不同,它是单向的。
承袭一向的惯例,直接上代码
服务端

这里读取一个当地文件,每100ms往客户端发送5个字符,必要注意的一点是,返回的 ContentType = "application/octet-stream",你必要告诉客户端返回的是一个流
  1. 1 [HttpGet("GetStream")]
  2. 2 public async Task GetStream()
  3. 3 {
  4. 4     string filePath = "文档.txt";
  5. 5     Response.ContentType = "application/octet-stream";
  6. 6     var reader = new StreamReader(filePath);
  7. 7     var buffer = new Memory<char>(new char[5]);
  8. 8     int writeLength;
  9. 9     //每次读取5个字符写入到流中
  10. 10     while ((writeLength = await reader.ReadBlockAsync(buffer)) > 0)
  11. 11     {
  12. 12         if (writeLength < buffer.Length)
  13. 13         {
  14. 14             buffer = buffer[..writeLength];
  15. 15         }
  16. 16         var value = buffer.ToString();
  17. 17         await Response.WriteAsync(value);
  18. 18         await Task.Delay(100);
  19. 19     }
  20. 20 }
复制代码
读取的文档内容

 客户端
  1. 1 [HttpGet("TestGetStream")]
  2. 2 public async Task TestGetStream([FromServices] IHttpClientFactory httpClientFactory)
  3. 3 {
  4. 4     using var client = httpClientFactory.CreateClient();
  5. 5     using var stream = await client.GetStreamAsync("http://localhost:5237/api/Test/GetStream");
  6. 6     using var streamReader = new StreamReader(stream);
  7. 7     var buffer = new char[5];
  8. 8     int writeLength;
  9. 9     while ((writeLength = await streamReader.ReadBlockAsync(buffer, 0, buffer.Length)) > 0)
  10. 10     {
  11. 11         Console.Write(new string(buffer, 0, writeLength));
  12. 12     }
  13. 13     Console.WriteLine("\nEND");
  14. 14 }
复制代码
 结果

  这里我们使用控制台简朴展示一下

 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

雁过留声

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表