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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何編排并發(fā)請求-響應(yīng)流?

如何編排并發(fā)請求-響應(yīng)流?

Go
慕桂英3389331 2021-12-07 10:03:20
我是并發(fā)編程的新手,不知道從什么概念開始,所以請保持溫和。我正在編寫一個 web 服務(wù)作為 TCP 服務(wù)器的前端。該服務(wù)器偵聽我給它的端口,并將響應(yīng)返回給每個請求的 TCP 連接。這就是我為此服務(wù)器編寫 Web 服務(wù)前端的原因:服務(wù)器一次可以處理一個請求,我試圖通過啟動多個進程并為它們提供不同的端口來偵聽,從而使其能夠同時處理多個輸入。例如,我想啟動 30 個實例并告訴它們偵聽端口 20000-20029。我們的團隊使用 PHP,而 PHP 沒有能力啟動服務(wù)器實例并同時維護它們,所以我正在嘗試編寫一個 API,它們只能向其發(fā)送 HTTP 請求。所以,這是我想到的結(jié)構(gòu)。我會有一個main()功能。此函數(shù)同時啟動進程,然后在端口 80 上啟動 HTTP 服務(wù)器并進行偵聽。我有一個http.Handler將請求的內(nèi)容添加到頻道的。我將有 gorutines,每個服務(wù)器實例一個,處于無限循環(huán)中。第 3 項中提到的函數(shù)的代碼將是這樣的:func handleRequest(queue chan string) {    for {        request := <-queue        conn, err := connectToServer()        err = sendRequestToServer(conn)        response, err := readResponseFromServer(conn)    }}所以,我http.Handler可以簡單地做一些事情,比如queue<- request將請求添加到隊列中,并且handleRequest已經(jīng)阻塞,等待通道有東西可以獲取,將簡單地獲取請求并繼續(xù)。完成后,循環(huán)結(jié)束,執(zhí)行返回到request := <-queue,并繼續(xù)相同的事情。我的問題始于http.Handler. 將請求放入一個通道是非常有意義的,因為多個 gorutine 都在監(jiān)聽它。但是,這些 gorutines 如何將結(jié)果返回給 my http.Handler?一種方法是使用一個通道,我們稱之為responseQueue,然后所有這些 gorutines 將寫入。問題是,當一個響應(yīng)添加到通道時,我不知道它屬于哪個請求。換句話說,當多個http.Handlers 發(fā)送請求時,每個正在執(zhí)行的處理程序?qū)⒉恢劳ǖ乐械漠斍跋儆谀膫€響應(yīng)。是否有最佳實踐或模式將數(shù)據(jù)從另一個 gorutine 發(fā)送到 gorutine 并接收回數(shù)據(jù)?
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

創(chuàng)建每個請求響應(yīng)通道并將其包含在發(fā)送給工作程序的值中。處理程序從通道接收。工作人員將結(jié)果發(fā)送到通道。


查看完整回答
反對 回復(fù) 2021-12-07
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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