我需要在未來以準確的時間戳發出 POST http 請求,盡可能準確,精確到毫秒。但也存在網路延遲。我怎樣才能實作這樣的目標?
setTimeout 在這里是不夠的,因為它總是需要一些時間,導致由于不同的網路延遲而導致后來者請求。并且在目標時間戳之前觸發此請求可能會導致提前到來的請求。
我的目標是保證請求在目標時間戳后到達服務器,但在它之后盡快。你能用 Nodejs 提出任何解決方案嗎?
uj5u.com熱心網友回復:
您可以在 nodejs(它不是??實時系統)中做的最好的事情是執行以下操作:
預先測量預期的延遲,以便您知道要發送多少請求。
用于
setTimeout()在目標時間之前的精確單向延遲時間安排發送。nodejs 中沒有其他更精確的機制。如果您的請求涉及 DNS 查找,您可以為您的主機名預取 TCP 地址,并將 DNS 查找時間從您的請求周期中取出,或者至少準備好本地 DNS 快取。
創建一個專用的 nodejs 程式,它什么都不做——所以它的事件回圈在
setTimeout()需要運行時不會做任何其他事情。如果需要,您可以從較大的程式中將其作為 child_process 運行。運行大量測驗以查看時序如何作業,如果您始終偏離一些余量,則調整您的延遲偏移。
您可以開發定期延遲測驗以確定延遲是否隨時間變化。
正如其他人所說,無法預測目標服務器的自然回應時間(從網路資料包到達那里開始處理請求需要多長時間)。如果大量傳入請求都在同一時間段競爭,那么您的請求將在所有其他請求中交錯,并以您無法控制的某種順序提供服務。
你可以考慮的其他事情。如果目標服務器支持最新的 http 規范,那么您可以與主機(可能針對某個其他端點)建立一個預先建立的 http 連接,該連接將保持活動狀態,以便您發送精確的計時請求。這需要一些實驗來確定目標主機支持什么以及這是否可行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356282.html
