2016-10-17 78 views
0

我的HTTP服務器需要確保將HTTP響應傳遞到客戶端。Node.js,如何確保客戶端從服務器獲取數據,而不'確認'來自客戶端的請求

我覺得(而且我會實現它),最正確的方法是發送來自客戶端的「我收到數據」請求。

但我有一點學術問題:

對服務器的一些其他裝置,用於檢測響應是否傳遞到客戶端或沒有(說由於客戶端的計算機被直接命中的蒸發數據傳輸期間的H-bomb)?

按照node.js http documentation

類:http.ServerResponse

...

事件: '完成'

當響應已經發射發送。更具體地說,當響應標頭和主體的最後一段已被 傳遞給操作系統以通過 網絡傳輸時,發出此事件 。這並不意味着客戶已收到任何東西。

此事件發生後,將不會再有事件發生在響應 對象上。

此外我沒有發現'net'模塊文檔中沒有更好的東西。

所以看來我只能知道我的數據是在內核緩衝區中通過網絡傳輸。

我可以通過Node.js的手段檢測到此傳輸中的一些錯誤嗎?

我可以通過一些易於實現的非Node.js手段來檢測此傳輸中的一些錯誤嗎?

任何鏈接和想法,這不是一種HTTP方式,甚至不是TCP方式也讚賞。

回答

1

有關TCP的事情是接收方必須承認它接收每一個數據位的事實。如果情況並非如此,發件人會一直髮送接收方尚未確認收到的數據。

我檢查了網絡模塊,我看到這個有趣的一塊:

Event: 'end' 
# 
Added in: v0.1.90 

Emitted when the other end of the socket sends a FIN packet. 

我對這個沒有實現的想法,但仍然,這可能是你的情況非常有用。

+0

事實上,我在Net文檔中也看到了這個'FIN',但是由於「在此事件之後,HTTP文檔中的響應對象字符串中沒有更多事件會發出」,我只是忘了它。有趣的是,'http。IncomingMessage'包含'socket'屬性,我認爲可以訂閱'end'事件。有趣的是,爲什麼http.ServerResponse對象不包含'套接字'屬性。無論如何謝謝,你的帖子很有用。 – Dzenly

相關問題