2013-08-25 18 views
0

我正在做一個應用程序,這將意味着讀取大量的數據發送到我的套接字。依賴套接字setReceiveBufferSize或使用BlockingQueue?

我現在的問題是,我是否應該依賴套接字setReceiveBufferSize,在那裏放置一個很大的值,希望它能收集我擁有的所有數據,直到我能夠處理它,或者使用BlockingQueue一切都在那裏,然後從另一個線程處理它來保持池和處理數據?

如果我讓隊列中最大數量的元素也是一個糟糕的設計? (所以我只是告訴它,「接受盡可能多的元素,只要你願意」),我指的是內存消耗,如果我會收到很多元素?

問候, 奧勒利安

回答

0

大套接字接收緩衝區始終是一個好主意,但對於TCP窗/吞吐量的原因,不是因爲你可能讀慢。您應該儘可能快地閱讀輸入內容,當然速度要快到達。擬議的BlockingQueue是完全浪費時間和空間。如果套接字接收緩衝區填滿,發送方將停止。這就是你需要的。

+0

問題是,我也對從套接字讀取的同一線程做了一些處理,這就是爲什麼我可能無法儘快讀取數據。關於失速階段,如果服務器發送的數據太多,在這個失速的情況下,數據在哪裏保存?我的意思是我會因爲這個攤位而丟失一些數據嗎?謝謝 – aureliangtx

+0

數據保存在套接字接收緩衝區中。這就是它的作用。*你不會失去任何東西。 – EJP

+0

發送套接字緩衝區和接收套接字緩衝區的建議大小是多少?我的意思是一些最佳值 – aureliangtx