精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

.NET 如何實(shí)現(xiàn)ChatGPT的Stream傳輸

開(kāi)發(fā) 前端
一個(gè) EventSource? 實(shí)例會(huì)對(duì) HTTP 服務(wù)器開(kāi)啟一個(gè)持久化的連接,以 text/event-stream 格式發(fā)送事件,此連接會(huì)一直保持開(kāi)啟直到通過(guò)調(diào)用 `EventSource.close()`關(guān)閉。

.NET 如何實(shí)現(xiàn)ChatGPT的Stream傳輸

ChatGPT是如何實(shí)現(xiàn)不適用websocket進(jìn)行一個(gè)一個(gè)字返回到前端的?

下面我們會(huì)介紹一下EventSource

EventSource

EventSource 接口是 web 內(nèi)容與服務(wù)器發(fā)送事件[1]通信的接口。

一個(gè) EventSource 實(shí)例會(huì)對(duì) HTTP[2] 服務(wù)器開(kāi)啟一個(gè)持久化的連接,以 text/event-stream 格式發(fā)送事件[3],此連接會(huì)一直保持開(kāi)啟直到通過(guò)調(diào)用 `EventSource.close()`[4] 關(guān)閉。

EventTarget  <= EventSource

一旦連接開(kāi)啟,來(lái)自服務(wù)端傳入的消息會(huì)以事件的形式分發(fā)至你代碼中。如果接收消息中有一個(gè) event 字段,觸發(fā)的事件與 event 字段的值相同。如果不存在 event 字段,則將觸發(fā)通用的 `message`[5] 事件。

與 WebSocket[6] 不同的是,服務(wù)器發(fā)送事件是單向的。數(shù)據(jù)消息只能從服務(wù)端到發(fā)送到客戶端(如用戶的瀏覽器)。這使其成為不需要從客戶端往服務(wù)器發(fā)送消息的情況下的最佳選擇。例如,對(duì)于處理如社交媒體狀態(tài)更新、消息來(lái)源(news feed)或?qū)?shù)據(jù)傳遞到客戶端存儲(chǔ)[7]機(jī)制(如 IndexedDB[8] 或 web 存儲(chǔ)[9])之類的,EventSource 無(wú)疑是一個(gè)有效方案。

  • 參考文獻(xiàn) EventSource[10]

使用場(chǎng)景

  • ChatGPT的Stream式對(duì)話,可以一個(gè)字一個(gè)字相應(yīng),增加用戶體驗(yàn)
  • 簡(jiǎn)單的大數(shù)據(jù)量的數(shù)據(jù)進(jìn)行推送到客戶端
  • 耗時(shí)并且持續(xù)化的數(shù)據(jù)傳輸

ASP.NET Core 實(shí)現(xiàn)

創(chuàng)建WebApi項(xiàng)目

圖片圖片

在Controllers中新建一個(gè)StreamController.cs文件,并且提供一個(gè)IAsyncEnumerable<out T>的Demo

  • IAsyncEnumerable<out T>

公開(kāi)對(duì)指定類型的值提供異步迭代的枚舉器。

StreamController.cs

using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers;

[ApiController]
[Route("[controller]")]
public class StreamController : ControllerBase
{
    [HttpPost]
    public async IAsyncEnumerable<char> Test()
    {
        const string value = "這是一個(gè)完整的測(cè)試數(shù)據(jù);為了測(cè)試IAsyncEnumerable<T>的使用";

        foreach (var v in value)
        {
            await Task.Delay(500);
            yield return v;
        }

        await Task.CompletedTask;
    }
}

上面案例的接口使用了IAsyncEnumerable<char>,作為返回值,將value字符串一個(gè)一個(gè)字符返回到前端。

每次返回等待500,這是服務(wù)端的實(shí)現(xiàn),下面寫客戶端的實(shí)現(xiàn),客戶端也是用.NET

使用js實(shí)現(xiàn)調(diào)用

首先啟動(dòng)api服務(wù),然后在打開(kāi)的swagger的瀏覽器界面中打開(kāi)開(kāi)發(fā)者工具使用F12打開(kāi)開(kāi)發(fā)者工具

圖片圖片

在控制臺(tái)中添加fetchAsStream方法用于調(diào)用IAsyncEnumerable<char>的接口服務(wù),代碼如下

async function fetchAsStream(url,data) {
    const response = await fetch(url, {
      method: "POST",
      headers: {
        "Content-Type": "application/json"
      },
      body: JSON.stringify(data),
    });
    if (!response.ok) {
      const reader = response.body?.getReader();
      const { done, value } = await reader.read();
      throw new Error(
        `Failed to fetch `
      );
    }
    if (!response.body) {
      throw new Error("ReadableStream not supported in this browser.");
    }

    const reader = response.body.getReader();
    return {
      [Symbol.asyncIterator]( "Symbol.asyncIterator") {
        return {
          async next() {
            const { done, value } = await reader.read();
            if (done) {
              return { done: true, value: null };
            }
            return {
              done: false,
              value: new TextDecoder("utf-8").decode(value),
            };
          },
        };
      },
    };

  }

圖片圖片

輸入完成按回車鍵會(huì)顯示一個(gè)undefined

然后下一步就調(diào)用這個(gè)方法,當(dāng)執(zhí)行下面這個(gè)代碼會(huì)發(fā)現(xiàn)控制臺(tái)會(huì)一個(gè)一個(gè)字顯示內(nèi)容。

var stream =  await fetchAsStream("http://localhost:5255/stream");

for await(var c of stream){
    console.log(c);
}

圖片圖片

看效果控制臺(tái)的字在一個(gè)一個(gè)輸出,請(qǐng)注意不要使用axios,默認(rèn)是不支持的。

參考資料

[1]服務(wù)器發(fā)送事件: https://developer.mozilla.org/zh-CN/docs/Web/API/Server-sent_events

[2]HTTP: https://developer.mozilla.org/zh-CN/docs/Web/HTTP

[3]事件: https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Building_blocks/Events

[4]EventSource.close(): https://developer.mozilla.org/zh-CN/docs/Web/API/EventSource/close

[5]message: https://developer.mozilla.org/zh-CN/docs/Web/API/EventSource/message_event

[6]WebSocket: https://developer.mozilla.org/zh-CN/docs/Web/API/WebSockets_API

[7]客戶端存儲(chǔ): https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage

[8]IndexedDB: https://developer.mozilla.org/zh-CN/docs/Web/API/IndexedDB_API

[9]web 存儲(chǔ): https://developer.mozilla.org/zh-CN/docs/Web/API/Web_Storage_API

[10]EventSource: https://developer.mozilla.org/zh-CN/docs/Web/API/EventSource

責(zé)任編輯:武曉燕 來(lái)源: token的技術(shù)分享
相關(guān)推薦

2023-03-28 08:05:37

2009-12-08 15:06:33

WCF傳輸DataSe

2023-02-07 10:09:20

ChatGPT人工智能

2018-03-16 15:14:08

Android傳輸文件

2018-08-14 14:20:40

MongoDBStream數(shù)據(jù)遷移

2011-09-07 14:43:24

2010-09-06 09:43:46

TCPUDPAndroid

2021-07-14 06:45:49

Windows.NetTopshelf

2009-05-26 09:09:50

.NET FramewStream.Read基礎(chǔ)類

2024-08-07 10:39:47

ChatGPT自然語(yǔ)言企業(yè)數(shù)據(jù)

2023-07-18 17:59:38

2022-11-21 10:49:29

Nacos配置加密

2024-05-27 09:52:00

Nacos加密配置

2010-01-06 15:56:18

.Net Framew

2020-08-13 09:55:37

Stream代碼Java

2023-04-03 11:52:00

ChatGPTDevOps技術(shù)

2023-10-10 08:00:00

2021-01-05 07:51:06

版本化ASP

2023-09-07 16:18:50

網(wǎng)絡(luò)方案

2023-03-15 15:56:09

新華三
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩电影一二三区| 国产人成视频在线观看| 亚洲第一视频区| av在线免费网站| 九九视频免费观看视频精品| 一区二区三区自拍| 国产欧美日韩视频在线| 国产日韩欧美一区| 91精品国产综合久久蜜臀| 日韩精品极品视频在线观看免费| 国产一级在线播放| 亚洲伦理网站| 国产精品网站在线观看| 2019精品视频| 色戒在线免费观看| 玖玖综合伊人| 亚洲在线免费| 日韩电影免费观看中文字幕| 国内少妇毛片视频| www.日韩高清| 牛牛国产精品| 欧美一区二区视频观看视频| 在线一区日本视频| 中文字幕第99页| 欧美中文字幕一区二区| 色吊一区二区三区| 欧美一级二级三级| 久久久免费高清视频| 欧美成a人免费观看久久| 亚洲国产aⅴ成人精品无吗| 51国偷自产一区二区三区| 最新av电影网站| 91麻豆精品一二三区在线| 亚洲成人福利片| 91福利在线导航| 丝袜亚洲另类欧美重口| aaa毛片在线观看| 天堂网在线观看视频| 尹人成人综合网| 精品国产精品一区二区夜夜嗨| 国产91沈先生在线播放| lutube成人福利在线观看| 久久国产麻豆精品| 亚洲色图美腿丝袜| 亚洲欧美国产日韩综合| 日本中文字幕伦在线观看| 国产精品综合av一区二区国产馆| 久久国产精品久久久| 免费黄视频在线观看| 爱看av在线| 久久久综合精品| 国产91精品视频在线观看| 免费日韩在线视频| 欧美成人一区在线观看| 日韩免费性生活视频播放| 久激情内射婷内射蜜桃| 你懂的视频在线免费| 99视频在线精品| 国产福利成人在线| 91精品一区二区三区蜜桃| 国语一区二区三区| 欧美图片一区二区三区| 日韩精品一区二区在线视频| 国产成人午夜| 亚洲免费在线看| 久久久久久久久一区二区| 一级黄色大毛片| 欧美日韩理论| 亚洲视频一区二区| 91精品人妻一区二区三区蜜桃欧美| 成人av色网站| 亚洲图片有声小说| 五月天亚洲综合情| 女人18毛片水真多18精品| 男女激情视频一区| 91国产中文字幕| 欧美日韩精品一区二区三区视频播放| 亚洲天堂日韩在线| 日韩一区二区三区电影在线观看| 日本一本二本在线观看| 亚洲图区一区| 欧美国产乱子伦| 一区二区三区欧美在线| 天天综合天天色| 久久亚洲捆绑美女| 视频一区国产精品| 国产在线高清视频| 久久久精品综合| 无码免费一区二区三区免费播放| 免费黄色网址在线观看| 99久久国产综合色|国产精品| 国产精品入口免费视| 在线观看 中文字幕| 亚洲女同中文字幕| 日韩中文在线中文网在线观看| 欧美爱爱免费视频| 99热精品在线| 久久久亚洲精选| 国产一区二区视频在线观看免费| 国产剧情一区| 久久香蕉国产线看观看网| 高清国产在线观看| 香蕉视频一区| 亚洲激情视频在线| 美女搡bbb又爽又猛又黄www| 亚欧洲精品视频在线观看| 色偷偷888欧美精品久久久| 久久久久黄色片| 欧美精品国产一区| 青青草国产精品一区二区| 日韩成人高清视频| 激情综合网址| 国产精品一区二区三| 天干夜夜爽爽日日日日| 性欧美xxxx大乳国产app| 国产在线观看不卡| 91麻豆国产在线| 激情文学综合插| 成人免费视频网址| 亚洲一区中文字幕在线| 成人av免费观看| 国产日产精品一区二区三区四区| 亚洲av无码一区二区乱子伦 | 综合国产精品久久久| av电影免费在线看| 一区二区不卡在线播放 | 欧美香蕉大胸在线视频观看| 国产一区二区三区乱码| 日韩经典av| 欧美日韩精品久久久| 激情 小说 亚洲 图片: 伦| 视频一区在线| 亚洲国产精品专区久久| 国产喷水在线观看| 日韩中文欧美在线| 久99久视频| 七七成人影院| 欧美日韩精品在线| 免费黄色一级网站| 四虎精品在线观看| 日韩一区二区免费高清| 69xxx免费| 日韩国产成人精品| 久久久水蜜桃| 欧美日韩在线观看首页| 色噜噜夜夜夜综合网| 久久久久亚洲AV成人无码国产| 人妖一区二区三区| 久久久久久国产精品三级玉女聊斋| 国产午夜久久久| 国内久久精品视频| 亚洲美女自拍偷拍| caoprom在线| 日韩视频免费直播| 在线免费观看亚洲视频| 国产一区二区三区四| 国产区一区二区| gogo高清在线播放免费| 亚洲大尺度美女在线| 波多野在线播放| 综合久久十次| 亚洲自拍小视频| 理论视频在线| 色综合久久九月婷婷色综合| 加勒比av中文字幕| 欧美五码在线| 777国产偷窥盗摄精品视频| 天天躁日日躁狠狠躁喷水| 都市激情亚洲色图| 91网站免费入口| 免费一级片91| 三上悠亚免费在线观看| 精品91久久| 日韩美一区二区三区| 午夜69成人做爰视频| 成人午夜电影久久影院| 一区二区欧美日韩| 亚洲免费资源| 欧美激情精品久久久久久变态| 在线免费一区二区| 成人涩涩免费视频| 欧美 日韩 国产在线观看| 国产午夜亚洲精品一级在线| 亚洲欧洲免费视频| 中文在线字幕免费观| 亚洲欧洲精品天堂一级| 久久精品一区二| 三区四区不卡| 国产精品99久久久久久www| 95在线视频| 色综合久久88色综合天天免费| 久久亚洲AV无码专区成人国产| 久久精品国产网站| 国产自产在线视频| 伊人久久大香线蕉| 成人免费观看a| 交100部在线观看| 精品三级在线看| 97精品在线播放| 国产成人精品亚洲午夜麻豆| 亚洲一区二区精品在线观看| 国产精品视频首页| 91精品国产91久久久| 午夜在线视频播放| 亚洲精品999| 97精品久久人人爽人人爽| 亚洲成人精品一区| 久久精品一区二区三区四区五区| 成人小视频免费观看| 黄色手机在线视频| 99国产精品99久久久久久粉嫩| 亚洲欧美日韩另类精品一区二区三区 | 五月天亚洲综合| 久久影院资源站| 久久久久久av| 91女主播在线观看| 精品亚洲一区二区三区在线播放 | 亚洲欧美日韩免费| 亚洲一区二区三区四区在线免费观看 | 国产亚洲福利社区一区| 精品欧美一区免费观看α√| 国产精品久久久久久影院8一贰佰| 国产精品久久精品| 欧美13一16娇小xxxx| 日韩国产精品视频| www.精品视频| 91精品国产91久久久久久最新毛片 | 日韩一级片免费在线观看| 欧美日韩成人激情| 亚洲大尺度在线观看| 欧美国产丝袜视频| 久久黄色片网站| 午夜久久福利| 亚洲一区二区精品在线观看| 免费视频亚洲| 精品高清视频| 全亚洲第一av番号网站| 一区二区三区黄色| 97成人免费视频| 欧美亚洲综合久久| 无码人妻丰满熟妇区bbbbxxxx| 亚洲超碰精品一区二区| 无码人妻aⅴ一区二区三区| 久久一本综合频道| 中文字幕色一区二区| 国产精品三级| 欧美一区二区福利| 精品盗摄女厕tp美女嘘嘘| 91精品久久久久久久久久久久久久 | 国产精品第12页| 亚洲精品黄色| 欧美性大战久久久久| 欧美视频第一| 国内外成人免费激情在线视频网站| 最新日本在线观看| 日韩电视剧在线观看免费网站| 殴美一级特黄aaaaaa| 亚洲第一福利网站| 天堂中文在线观看视频| 亚洲国产精品悠悠久久琪琪| 亚洲色图另类小说| 亚洲精品日韩久久久| 国产女人在线观看| 日韩区在线观看| 亚洲精品视频网| 亚洲激情自拍图| 麻豆导航在线观看| 丝袜亚洲另类欧美重口| 国产在线激情视频| 色综合久久精品亚洲国产| 久久经典视频| 欧美不卡在线视频| 秋霞网一区二区| 亚洲乱码国产乱码精品精| 国产内射老熟女aaaa∵| 欧美午夜激情在线| 欧美在线视频精品| 欧美一区中文字幕| 嫩草影院一区二区| 亚洲天堂av女优| 精品美女在线观看视频在线观看| 欧美成aaa人片在线观看蜜臀| 欧美野外wwwxxx| 97成人在线视频| 成人全视频在线观看在线播放高清 | 成人av网站免费| 久久久久久久久久久久久久久| 国产精品视频第一区| 亚洲观看黄色网| 国产精品99久久久| 三级黄色片网站| 国产精品福利一区| 先锋影音av在线| 亚洲天堂福利av| 精品人体无码一区二区三区| 91麻豆免费观看| 乱码一区二区三区| 91日韩一区二区三区| 亚洲色图第四色| 亚洲最新在线观看| 丰满人妻老熟妇伦人精品| 性做久久久久久免费观看欧美| 久久青青草原亚洲av无码麻豆| 欧美美女直播网站| 久久久久久在线观看| 在线不卡中文字幕| 日本在线一二三| 亚洲成色777777女色窝| avtt亚洲| 91极品女神在线| 国产色99精品9i| 欧美一区1区三区3区公司| 欧美日韩亚洲国产精品| 五月婷婷狠狠操| 成人黄色在线网站| 在线看的片片片免费| 日韩欧美中文第一页| 亚洲a视频在线| 日韩一区二区精品视频| 免费大片在线观看www| 2023亚洲男人天堂| 中文在线免费一区三区| 91久久伊人青青碰碰婷婷| 教室别恋欧美无删减版| 成年人网站国产| 国产在线麻豆精品观看| 公肉吊粗大爽色翁浪妇视频| 天天综合网天天综合色| 国产www在线| 精品美女在线播放| 国产精品扒开做爽爽爽的视频| 国产精品福利网站| 伊人久久大香线蕉无限次| 成人性免费视频| 午夜影院日韩| 国产高潮失禁喷水爽到抽搐| 99久久精品99国产精品 | 无吗不卡中文字幕| www五月婷婷| 欧美理论片在线观看| 国产一区二区三区国产精品| 宅男av一区二区三区| 久久精品国内一区二区三区| av在线播放中文字幕| 欧美亚洲禁片免费| av网站在线免费观看| 国产精品久久久久国产a级| 国产伦精品一区二区三区千人斩| 国产精品333| 久久综合狠狠综合| 黄瓜视频在线免费观看| 亚洲精品一区二区久| 午夜久久中文| 成人激情免费在线| 91嫩草亚洲精品| 国产原创popny丨九色| 国产91对白在线观看九色| 久久久精品人妻无码专区| 国产精品色婷婷久久58| 自拍偷拍第八页| 少妇久久久久久| 中文字幕日本一区| 在线观看成人免费| 国产成人精品www牛牛影视| 精品一区二区三区四| 亚洲黄色片网站| 新片速递亚洲合集欧美合集| 日本一区高清不卡| 精品系列免费在线观看| 欧美日韩免费做爰视频| 亚洲成**性毛茸茸| 免费日韩电影| 一区二区三区欧美成人| 国产成人在线观看| 日韩精品手机在线| 中文在线不卡视频| 久热在线观看视频| 欧美一区1区三区3区公司| 久久成人羞羞网站| 久久久久久久久久综合 | 在线观看av黄网站永久| 成人黄色av网| 亚洲国产高清一区| 怡红院一区二区三区| 91精品国产欧美一区二区18| 国产第一页在线| 欧美一进一出视频| 国产精一品亚洲二区在线视频| 日韩精品一卡二卡| 正在播放欧美视频| 一区三区自拍| 天天爽人人爽夜夜爽| 亚洲最新视频在线观看| 国产高清视频在线播放| 亚洲永久在线观看| 免费看的黄色欧美网站| 老熟妇高潮一区二区三区| 国产丝袜一区视频在线观看 | 久久久久久婷| 白嫩情侣偷拍呻吟刺激 |