第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

reactor-netty:使用 keep-alive HTTP 客戶端

reactor-netty:使用 keep-alive HTTP 客戶端

qq_笑_17 2022-10-26 15:52:32
我reactor-netty用來(lái)請(qǐng)求一組 URL。大多數(shù) URL 屬于同一主機(jī)。reactor-netty即使已經(jīng)為前一個(gè) URL 建立了與主機(jī)的連接,似乎也為每個(gè) URL 建立了一個(gè)全新的 TCP 連接。當(dāng)建立數(shù)百個(gè)同時(shí)連接時(shí),一些服務(wù)器會(huì)斷開(kāi)新連接或開(kāi)始緩慢響應(yīng)。代碼示例:    Flux.just(...)    .groupBy(link -> {        String host = "";        try {            host = new URL(link).getHost();        } catch (MalformedURLException e) {            LOGGER.warn("Cannot determine host {}", link, e);        }        return host;    })    .flatMap(group -> {        HttpClient client = HttpClient.create()                .keepAlive(true)                .tcpConfiguration(tcp -> tcp.host(group.key()));        return group.flatMap(link -> client.get()            .uri(link)            .response((resp, cont) -> resp.status().code() == 200 ? cont.aggregate().asString() : Mono.empty())            .doOnSubscribe(s -> LOGGER.debug("Requesting {}", link))            .timeout(Duration.ofMinutes(1))            .doOnError(e -> LOGGER.warn("Cannot get response from {}", link, e))            .onErrorResume(e -> Flux.empty())            .collect(Collectors.joining())            .filter(s -> StringUtils.isNotBlank(s)));    })    .blockLast();在日志中,我看到同一遠(yuǎn)程主機(jī)的本地端口不同,并且活動(dòng)和非活動(dòng)連接的總和遠(yuǎn)高于不同主機(jī)的數(shù)量。這就是為什么我認(rèn)為這reactor-netty不是重用已經(jīng)建立的連接。DEBUG [2019-04-29 08:15:18,711] reactor-http-nio-10 r.n.r.PooledConnectionProvider: [id: 0xaed18e87, L:/192.168.1.183:56832 - R:capcp2.naad-adna.pelmorex.com/52.242.33.4:80] Releasing channelDEBUG [2019-04-29 08:15:18,711] reactor-http-nio-10 r.n.r.PooledConnectionProvider: [id: 0xaed18e87, L:/192.168.1.183:56832 - R:capcp2.naad-adna.pelmorex.com/52.242.33.4:80] Channel cleaned, now 1 active connections and 239 inactive connections...DEBUG [2019-04-29 08:15:20,158] reactor-http-nio-10 r.n.r.PooledConnectionProvider: [id: 0xd6c6c5db, L:/192.168.1.183:56965 - R:capcp2.naad-adna.pelmorex.com/52.242.33.4:80] Releasing channelkeep-alive是否可以通過(guò)與主機(jī)的同一 TCP 連接使用 HTTP 客戶端在同一主機(jī)上請(qǐng)求多個(gè) URL ?如果沒(méi)有,我如何限制同時(shí)連接到同一主機(jī)的數(shù)量或按順序執(zhí)行對(duì)同一主機(jī)的請(qǐng)求(下一個(gè)請(qǐng)求只有在收到對(duì)前一個(gè)響應(yīng)的響應(yīng)后)?我使用Californium-SR6發(fā)布火車(chē)。
查看完整描述

1 回答

?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

是的,reactor netty 支持 keep-alive、連接重用和連接池。

請(qǐng)注意,這.flatMap是一個(gè)并行處理內(nèi)部流的異步操作。因此,當(dāng)您調(diào)用group.flatMap(...內(nèi)部請(qǐng)求時(shí),將并行執(zhí)行。而且由于它們是并行執(zhí)行的,因此需要建立多個(gè)連接。

如果您想按順序執(zhí)行對(duì)同一主機(jī)的請(qǐng)求,請(qǐng)將您的示例更改為使用group.concatMap而不是.flatMap.

如果您仍想并行執(zhí)行它們,但限制對(duì)單個(gè)主機(jī)的活動(dòng)請(qǐng)求的數(shù)量,則將您的示例更改為使用.flatMapconcurrency參數(shù)的重載版本之一。

此外,由于您使用的是HttpClient.create(),因此您的示例使用默認(rèn)的全局 http 連接池。如果您想對(duì)連接池進(jìn)行更多控制,可以指定不同的ConnectionProvidervia HttpClient.create(ConnectionProvider)。


查看完整回答
反對(duì) 回復(fù) 2022-10-26
  • 1 回答
  • 0 關(guān)注
  • 192 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)