我正在用Java開發一個小型客戶端 - 服務器程序。Java - 網絡 - 最佳實踐 - 混合同步/異步命令
客戶端和服務器通過一個tcp連接進行連接。通信的大部分部分是異步的(可以隨時發生),但我希望某些部分是同步的(比如發送命令的ACK)。
我使用一個線程從套接字的InputStream中讀取命令並引發一個onCommand()事件。命令本身是由命令設計模式推進的。
什麼是最佳實踐方法(Java),以便能夠等待ACK而不會錯過可能同時出現的其他命令?
con.sendPacket(new Packet("ABC"));
// wait for ABC_ACK
EDIT1
它認爲像一個FTP-連接,但兩者的數據和控制命令是在同一連接上。我想捕獲對控制命令的響應,而後臺的數據流正在運行。
EDIT2
一切都在塊發送到啓用多個(不同的)在相同的TCP連接被transmissons(複用)
Block:
1 byte - block's type
2 byte - block's payload length
n byte - block's paylod
所以在發送數據包之後,您希望方法能夠**阻塞**直到它收到ACK數據包? – khellang 2011-06-04 21:23:36
你想發送「ABC」並等待確認,但是也可以發送「EFG」而不必因ABC_ACK而延遲? – Cratylus 2011-06-04 21:36:30
對兩者都是。我有同一連接上的控制命令(如ABC)和數據流。閱讀線程讀取它們兩個。所以我的問題是,如何將ABC_ACK從讀線程「傳遞」到發送ABC的(阻塞)方法。 – kazu 2011-06-04 22:30:51