<nav id="cjthq"><strong id="cjthq"><legend id="cjthq"></legend></strong></nav>

        国产av丝袜熟女一二三,麻豆精品一区二区视频在线,中文字幕日韩精品人妻,精品无码av不卡一区二区三区,国产精品自在自线视频,久久国产亚洲精选av,91精品国产91久久综合,一本一道久久久a久久久精品91

        ASP.NET Core Web API 流式返回,逐字顯示-當前焦點

        2023-04-23 22:19:36 來源:博客園

        Websocket、SSE(Server-Sent Events)和長輪詢(Long Polling)都是用于網頁和服務端通信的技術。

        Websocket是一種全雙工通信協議,能夠實現客戶端和服務端之間的實時通信。它基于TCP協議,并且允許服務器主動向客戶端推送數據,同時也允許客戶端向服務器發送數據。


        (資料圖)

        SSE是一種單向通信協議,允許服務器向客戶端推送數據,但不支持客戶端向服務器發送數據。SSE建立在HTTP協議上,通過在HTTP響應中使用特殊的Content-Type和事件流(event stream)格式來實現。

        長輪詢是一種技術,客戶端向服務器發送一個請求,并且服務器保持連接打開直到有數據可以返回給客戶端。如果在指定的時間內沒有數據可用,則服務器會關閉連接,客戶端需要重新建立連接并再次發起請求。

        New Bing聊天頁面是通過WebSocket進行通信。

        Open AI的ChatGPT接口則是通過SSE協議由服務端推送數據

        事實上,以上幾種方式包括長輪詢,都可以實現逐字顯示的效果。那還有沒有其他的辦法可以實現這種效果了呢?

        流式響應

        當客戶端返回流的時候,客戶端可以實時捕獲到返回的信息,并不需要等全部Response結束了再處理。

        下面就用ASP.NET Core Web API作為服務端實現流式響應。

        返回文本內容

        服務端

        [HttpPost("text")]public async Task Post(){    string filePath = "文檔.txt";    Response.ContentType = "application/octet-stream";    var reader = new StreamReader(filePath);    var buffer = new Memory(new char[5]);    int writeLength = 0;    //每次讀取5個字符寫入到流中    while ((writeLength = await reader.ReadBlockAsync(buffer)) > 0)    {        if (writeLength < buffer.Length)        {        buffer = buffer[..writeLength];        }        await Response.WriteAsync(buffer.ToString());        await Task.Delay(100);    }}

        客戶端

        C# HttpClient
        public async void GetText(){    var url = "http://localhost:5000/config/text";    var client = new HttpClient();    using HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, url);    var response = await client.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseHeadersRead);    await using var stream = await response.Content.ReadAsStreamAsync();    var bytes = new byte[20];    int writeLength = 0;    while ((writeLength = stream.Read(bytes, 0, bytes.Length)) > 0)    {    Console.Write(Encoding.UTF8.GetString(bytes, 0, writeLength));    }    Console.WriteLine();    Console.WriteLine("END");}

        HttpCompletionOption枚舉有兩個值,默認情況下使用的是ResponseContentRead

        ResponseContentRead:等到整個響應完成才完成操作

        ResponseHeadersRead:一旦獲取到響應頭即完成操作,不用等到整個內容響應

        js XMLHttpRequest
        <script>    var div = document.getElementById("content")    var url = "http://localhost:5000/config/text"    var client = new XMLHttpRequest()    client.open("POST", url)    client.onprogress = function (progressEvent) {        div.innerText = progressEvent.target.responseText    }    client.onloadend = function (progressEvent) {        div.append("END")    }    client.send()</script>

        用axios請求就是監聽onDownloadProgress 了。

        瀏覽器是通過Response Header中的Content-Type來解析服務端響應體的。如果后端接口沒有設置Response.ContentType = "application/octet-stream"onprogress只會在響應全部完成后觸發。

        返回圖片

        服務端

        [HttpGet("img")]public async Task Stream(){    string filePath = "pixelcity.png";    new FileExtensionContentTypeProvider().TryGetContentType(filePath, out string contentType);    Response.ContentType = contentType ?? "application/octet-stream";    var fileStream = System.IO.File.OpenRead(filePath);    var bytes = new byte[1024];    int writeLength = 0;    while ((writeLength = fileStream.Read(bytes, 0, bytes.Length)) > 0)    {        await Response.Body.WriteAsync(bytes, 0, writeLength);        await Task.Delay(100);    }}

        關鍵詞:

        相關文章

        熱文推薦

        ASP.NET Core Web API 流式返回,逐字顯示-當前焦點
        ASP.NET Core Web API 流式返回,逐字顯示-當前焦點

        Websocket、SSE(Server-SentEvents)和長輪詢(LongP......更多>

        基于Canal實現MySQL 8.0 數據庫數據同步-當前快訊
        基于Canal實現MySQL 8.0 數據庫數據同步-當前快訊

        前言服務器說明|主機名稱|操作系統|說明||--|--|||192......更多>

        即時看!Node工程的依賴包管理方式
        即時看!Node工程的依賴包管理方式

        在前端工程化中,JavaScript依賴包管理是非常重要的一......更多>

        中南建設為子公司文昌中南、蕪湖榮眾合計擔保7952萬元 天天速看
        中南建設為子公司文昌中南、蕪湖榮眾合計擔保7952萬元 天天速看

        截至公告日,中南建設及控股子公司對外擔保余額為427......更多>

        排行推薦

        廣東統計局:一季度廣東實現地區生產總值突破3萬億,工業生產增速轉正|世界快報
        廣東統計局:一季度廣東實現地區生產總值突破3萬億,工業生產增速轉正|世界快報
        上證報中國證券網訊4月23日,廣東統計局發布2023年一... 更多>
        全球微頭條丨我國已有20個省份、40余條線路開展車路協同智慧高速公路建設
        全球微頭條丨我國已有20個省份、40余條線路開展車路協同智慧高速公路建設
        新華社北京4月23日電(記者葉昊鳴)智慧高速公路是交... 更多>
        生態環境部:今年一季度全國地表水水質提升
        生態環境部:今年一季度全國地表水水質提升
        上證報中國證券網訊據生態環境部4月23日消息,生態環... 更多>
        第九章 無眠之夜
        第九章 無眠之夜
        【在這個被墮淵的侵蝕的世界,死亡,變得不再是一切的... 更多>
        看熱訊:雅詩閣提前實現全球16萬套的管理目標
        一季度,雅詩閣新簽超4000套單元,提前實現全球管理16... 更多>
        熱資訊!國資委召開國有企業創建世界一流示范企業推進會
        據國資委網站,國資委副主任翁杰明指出,示范企業下一... 更多>
        海關總署副署長王令浚會見克羅地亞外交部國務秘書馬圖斯奇 當前焦點
        據海關發布微信公眾號,海關總署副署長王令浚21日上午... 更多>
        證監會核發首批企業債券注冊批文 短訊
        據證監會官網,證監會對國家發展改革委移交的34個企業... 更多>
        寧靜的快樂 每日快報
        前幾天和朋友去看盆景。朋友隨口說了一句,這么小的一... 更多>
        香港特首李家超訪問比亞迪深圳總部|頭條焦點
        4月22日,香港特首李家超參觀了比亞迪深圳總部,乘坐... 更多>
        熱消息:當AI已成往事,系統會自動再平衡:(第1023篇周策略)2023.04.23
        $銀華天璣-悄悄盈(TIA05031)$$銀華天璣-年年紅(TIAA04... 更多>
        人工智能和Ai產業鏈是一場財富的再分配
        1:創業板左側第一個藍色圈處是2022年4 22-4 30號,... 更多>
        財報季最后一周!海天味業、邁瑞醫療、五糧液業績將揭曉,你更期待哪一家?|一周財報前瞻|每日速訊
        四月末,A股上市公司年報披露接近尾聲。同花順數據顯... 更多>
        2023廣東省博物館五一展覽活動有哪些?
        2023廣東省博物館五一展覽活動有哪些?一眼千萬年——... 更多>

        捷達VS7什么平臺_捷達vs7是什么平臺

        【快播報】后背毛囊炎怎么治好_后背

        熱推薦:一年級家長會心得簡短100字

        維生素e可以擦臉嗎有什么效果_維生

        環球速遞!福建白水洋圖片_白水洋在

        天天關注:暁_對于暁簡單介紹

        當前熱點-晾鷹臺集蒙古諸部落慰勞遣

        晾馬臺村_對于晾馬臺村簡單介紹

        【安委辦動態】石湖蕩鎮恬潤新苑開

        每日速讀!宇環數控:簽訂1.07億元日

        主站蜘蛛池模板: 国产精品不卡在线专区| 女人18毛片水真多| 蜜臀AV夜夜澡人人爽| 无码任你躁久久久久久牛牛| 夜晚被公侵犯的人妻深田字幕| 黄色国产精品一区二区三区| 久久久久久精品毛片A级打码| 国产A级毛片久久久久久精品| 久久99精品久久久大学生| 国产免费无遮挡在线观看视频| 国产成人午夜精品福利| 欧美中文精品有码视频在线| 国产精品无码天堂2021| 久久精品国产亚洲欧美日韩| 国产羞羞的视频在线观看| 精品国产偷窥丝袜在线拍国| 黄色福利在线| 国产免费视频一区二区| 欧美成人vr在线高清精品| 人与善性猛交Ⅹ| 久久久久久久久精品中文字幕| 欧美视频一区二区三区四区 | 四虎永久在线精品免费网址| 18禁成人免费无码网站| 安图县| 在线a亚洲老鸭窝天堂| 中文字幕亚洲综合久久蜜桃 | 国产婷婷色一区二区三区在线| 婷婷久久香蕉五月综合加勒比| 色噜噜一区二区三区| 国产免国产免费| 国产精品高潮呻吟久久影视A片 | 国产一级黄片视频亚洲精品黄色| 精品欧洲AV无码一区二区14 | 国产精品无码一区二区三区| 人妻少妇精品视频一区二区三区| 免费一级毛片线在线播放| 嘉鱼县| 一个人看www在线高清免费看 | 亚洲阿v天堂无码2021| 色欲av人妻精品久久久|