亚洲va在线va天堂xxxx中文 ,女子奶水太多喂老头中文字幕,亚洲性啪啪无码av天堂,无码H肉动漫在线观看免费中文

ASP.NET Core Web API 流式返回,逐字顯示-當(dāng)前焦點(diǎn)

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

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

Websocket是一種全雙工通信協(xié)議,能夠?qū)崿F(xiàn)客戶端和服務(wù)端之間的實(shí)時(shí)通信。它基于TCP協(xié)議,并且允許服務(wù)器主動(dòng)向客戶端推送數(shù)據(jù),同時(shí)也允許客戶端向服務(wù)器發(fā)送數(shù)據(jù)。


(資料圖)

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

長輪詢是一種技術(shù),客戶端向服務(wù)器發(fā)送一個(gè)請(qǐng)求,并且服務(wù)器保持連接打開直到有數(shù)據(jù)可以返回給客戶端。如果在指定的時(shí)間內(nèi)沒有數(shù)據(jù)可用,則服務(wù)器會(huì)關(guān)閉連接,客戶端需要重新建立連接并再次發(fā)起請(qǐng)求。

New Bing聊天頁面是通過WebSocket進(jìn)行通信。

Open AI的ChatGPT接口則是通過SSE協(xié)議由服務(wù)端推送數(shù)據(jù)

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

流式響應(yīng)

當(dāng)客戶端返回流的時(shí)候,客戶端可以實(shí)時(shí)捕獲到返回的信息,并不需要等全部Response結(jié)束了再處理。

下面就用ASP.NET Core Web API作為服務(wù)端實(shí)現(xiàn)流式響應(yīng)。

返回文本內(nèi)容

服務(wù)端

[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個(gè)字符寫入到流中    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枚舉有兩個(gè)值,默認(rèn)情況下使用的是ResponseContentRead

ResponseContentRead:等到整個(gè)響應(yīng)完成才完成操作

ResponseHeadersRead:一旦獲取到響應(yīng)頭即完成操作,不用等到整個(gè)內(nèi)容響應(yīng)

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請(qǐng)求就是監(jiān)聽onDownloadProgress 了。

瀏覽器是通過Response Header中的Content-Type來解析服務(wù)端響應(yīng)體的。如果后端接口沒有設(shè)置Response.ContentType = "application/octet-stream",onprogress只會(huì)在響應(yīng)全部完成后觸發(fā)。

返回圖片

服務(wù)端

[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);    }}

關(guān)鍵詞:

相關(guān)文章

熱文推薦

ASP.NET Core Web API 流式返回,逐字顯示-當(dāng)前焦點(diǎn)
ASP.NET Core Web API 流式返回,逐字顯示-當(dāng)前焦點(diǎn)

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

基于Canal實(shí)現(xiàn)MySQL 8.0 數(shù)據(jù)庫數(shù)據(jù)同步-當(dāng)前快訊
基于Canal實(shí)現(xiàn)MySQL 8.0 數(shù)據(jù)庫數(shù)據(jù)同步-當(dāng)前快訊

前言服務(wù)器說明|主機(jī)名稱|操作系統(tǒng)|說明||--|--|||192......更多>

即時(shí)看!Node工程的依賴包管理方式
即時(shí)看!Node工程的依賴包管理方式

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

中南建設(shè)為子公司文昌中南、蕪湖榮眾合計(jì)擔(dān)保7952萬元 天天速看
中南建設(shè)為子公司文昌中南、蕪湖榮眾合計(jì)擔(dān)保7952萬元 天天速看

截至公告日,中南建設(shè)及控股子公司對(duì)外擔(dān)保余額為427......更多>

排行推薦

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

捷達(dá)VS7什么平臺(tái)_捷達(dá)vs7是什么平臺(tái)

【快播報(bào)】后背毛囊炎怎么治好_后背

熱推薦:一年級(jí)家長會(huì)心得簡(jiǎn)短100字

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

環(huán)球速遞!福建白水洋圖片_白水洋在

天天關(guān)注:暁_對(duì)于暁簡(jiǎn)單介紹

當(dāng)前熱點(diǎn)-晾鷹臺(tái)集蒙古諸部落慰勞遣

晾馬臺(tái)村_對(duì)于晾馬臺(tái)村簡(jiǎn)單介紹

【安委辦動(dòng)態(tài)】石湖蕩鎮(zhèn)恬潤新苑開

每日速讀!宇環(huán)數(shù)控:簽訂1.07億元日