09/09/2015, 00:42
|
| Colaborador | | Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 20 años, 2 meses Puntos: 454 | |
Respuesta: Deadlock implementando un protocolo en java Hola:
Habitualmente el envío y la recepción se suelen separar en dos hilos independientes, de esta forma, mientras el que recibe está bloqueado, se puede seguir enviando.
En tu caso, quizás se pueda solucionar si creas un hilo encargado de recibir mensajes de la comunicación que haga lo siguiente:
- si el mensaje es un mensaje pubrec, él mismo envía la respuesta.
- si recibe una respuesta, informa al hilo encargado de enviar de que ha llegado la respuesta.
Por otro lado, el hilo que envía, recoge de la cola, envía y se queda a la espera que de que el hilo receptor le avise, o pase el tiempo para reenviar. Si el hilo receptor le avisa, quita el mensaje de la cola y envía el siguiente.
Un detalle, al haber dos hilos que envían por el mismo sitio, debes sincronizar el envío synchronized(socket) {enviar} o el tipo de canal que tengas (si es udp quizás no haga falta).
Se bueno. |