JP
Здесь вы видите классическую проблему производителя / потребителя ... Во время инициализации Connection
должен создать MessageQueue
start Sender
в своем собственном фоновом потоке.
Затем соединение posts
просто отправляет сообщения в очередь, чтобы отправитель мог забрать и переслать, когда будет готов.
Сложный бит управляет максимальным размером очереди ... Если производитель последовательно опережает потребителя, тогда очередь может увеличиться до неуправляемого размера. Самый простой подход заключается в блокировке потока производителя до тех пор, пока очередь не перестанет заполняться. Это можно сделать с помощью back-off-ARQ. то есть: while(queue.isFull) sleep(100, "milliseconds"); queue.add(message);
Если вам не требуется 100% -ная передача (например, чат-приложение), вы можете просто выдать исключение MessageQueueFullException, и бедному клиенту просто придется преодолеть это ... просто всегда позволяйте им повторить позже ... позволяя пользователю управлять повторными попытками для вас.
Вот как бы я справился с этим. Мне будет интересно посмотреть, какие другие предложения приглушены.
Надеюсь, у вас все получится. Приветствия. Кит.