Estoy desarrollando un pequeño programa cliente-servidor en Java.Java - redes - Mejores prácticas - Comandos síncronos/asíncronos mixtos
El cliente y el servidor están conectados a través de una conexión tcp. La mayoría de las partes de la comunicación son asíncronas (pueden suceder en cualquier momento) pero algunas partes quiero que sean sincrónicas (como ACK para un comando enviado).
Utilizo un subproceso que lee los comandos del InputStream del socket y genera un evento onCommand(). El Command en sí mismo es progresado por Command-Design-Pattern.
¿Cuál sería un enfoque de mejores prácticas (Java), para permitir la espera de un ACK sin perder otro, comandos que podrían aparecer al mismo tiempo?
con.sendPacket(new Packet("ABC"));
// wait for ABC_ACK
edit1
Piense en ello como un FTP-conexión, pero que tanto los datos de control y comandos están en la misma conexión. Quiero ver la respuesta a un comando de control, mientras se ejecuta el flujo de datos en segundo plano.
Edit2
Todo se envía en bloques para permitir múltiples (diferentes) transmissons más de la misma red TCP-Conexión (multiplexación)
Block:
1 byte - block's type
2 byte - block's payload length
n byte - block's paylod
así que después de haber enviado el paquete, ¿desea el método para ** bloquear ** hasta que reciba el paquete ACK? – khellang
quieres enviar "ABC" y esperar el ack, pero también ser capaz de enviar "EFG" sin tener que retrasar debido al ABC_ACK? – Cratylus
sí a ambos.tengo comandos de control (como ABC) y flujo de datos en la misma conexión. el hilo de lectura los lee a ambos. entonces mi problema es cómo "entregar" el ABC_ACK del hilo de lectura al método (de bloqueo) que envió el ABC. – kazu