2012-12-05 114 views
0

基本上,我得到一個偵聽器(當它收到一個新連接時)創建一個新的socketWorker並將連接分配給客戶端。 現在,如果客戶端發送一個巨大的文件(需要30秒才能完全接收),然後發送一個幾個字節的小文件,那麼只有在完全接收到大文件時纔會收到這個小文件。 這顯然是一個不好的方法,我想知道我該怎麼做才能同時發送這些文件?連接的TCP套接字如何同時發送/接收多個文件?

截至目前我正在使用異步方法,每次文件已被完全接收時再次調用BeginReceive()來接收下一個文件(壞道)。

有什麼辦法解決這個問題? 我會很感激!

回答

1

你必須實現多路複用,例如SPDY呢。這是(基本上)通過構建消息部分並在每個幀上提供流ID來完成的。這樣,多個流可以通過單個連接進行交換。

或者,您可以爲每個文件打開一個連接。

+0

感謝您的回覆。 SPDY似乎有點複雜,所以我想我會打開每個文件的連接。 當你說我應該打開每個文件的連接;我應該聽多個端口,還是在實踐中如何做到這一點? – user1876706

+1

@ user1876706我不是說你應該實現SPDY,但你可以使用相同的想法。但是你的客戶端也可以打開多個連接到同一個端口,就像HTTP那樣。每個文件一個請求,每個請求一個文件。這一切都取決於您當前的協議。 – CodeCaster

+0

啊,我明白了。 關於在一個端口上打開多個連接的客戶端: 我可以將已經連接的套接字複製到新的套接字並使用它嗎?或者我應該從字面上爲每個新文件建立一個新的連接? – user1876706