javascript - Nodejs伺服器中 應該何時res.end()呢?
伊谢尔伦
伊谢尔伦 2017-05-17 09:56:21
0
2
487

有這樣的一個場景 '/blog' 路由下要處理使用者提交的資料
假設要把三份資料儲存到三個key 然後程式碼寫出來就變成這樣

function handlePostBlog(req, res){
    resid_client.set( key1, data1, function(err, response){
        resid_client.set(key2, data2, function(err,response){
            resid_client.set(key3, data3, function(err, response){
                if(response === 'ok'){
                    res.writeHead(200, ...)
                    res.end()
                }
            })
        })
    })
}

不考慮好不好看。 。雖然用promise包裝的好看一些 但是在最後一個回調中res.end()來關閉連接,是不是存在問題?這個請求會被掛起很長一段時間把?一般這種地方該怎麼處理?因為只需要set而不需要回傳結果給用戶,所以收到請求之後就直接res.end()來關閉連線可以不?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(2)
为情所困

這取決於你是否希望這個 HTTP 請求的回傳結果與資料庫操作的結果有關聯性,以及使用者互動設計是否容忍這個操作所花費的時間。

你在設計這個 '/blog' 介面時,需要明確指明 HTTP 回傳 200 代表什麼。如果你們的業務場景只關心資料交付到後端,不關心後端是否正確儲存到資料庫,那肯定可以直接結束掉 HTTP 請求。如果你們希望終端使用者得到這個確切的提交結果,那需要考慮互動層面了,設計良好的互動效果,2-6秒的等待,使用者體驗不會很差(指AJAX請求場景下,打開新頁面場景下還是慎重)。寫三次redis幾乎是不花時間,比起 HTTP 請求本身的鏈路延遲根本不算什麼。

具體業務場景還要具體分析。碰到特別耗時的操作,前端提交操作請求後輪訓結果也不失為一種解決方案。

曾经蜡笔没有小新

看頁面顯示和資料庫操作結果有沒有相關性。如果有相關性,可以等待資料庫操作結束之後再返回。也可以做成非同步隊列的方式直接返回,成功後在推送結果。最終怎麼樣,還是看你需求。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!