Мне нужно отправить непрерывный поток сообщений (простые текстовые сообщения с временной меткой и координатами x/y) по беспроводной сети с движущегося компьютера. Будет много таких коротких сообщений (например, 200 в секунду), и, к сожалению, сетевое соединение, скорее всего, ненадежное, поскольку отправляющее устройство время от времени покидает зону WLAN... Когда соединение недоступно, все предстоящие сообщения должен буферизоваться до тех пор, пока соединение не будет снова восстановлено. Порядок передаваемых сообщений не имеет значения, поскольку они содержат временную метку, но все сообщения должны быть переданы.
Какой простой, но надежный метод отправки этих телеграмм? Можно ли использовать простое соединение TCP или UDP? Будут ли буферизироваться сообщения, когда соединение временно отключится и будет отправлено автоматически? Или потеря связи напрямую обнаружена и отправлена, поэтому я могу буферизовать сообщения и периодически пытаться повторно подключаться самостоятельно? Нужны ли библиотеки, такие как Netty?
Я также подумал об использовании брокера для посреднической связи (например, сети посредников ActiveMQ) в качестве альтернативы. Наверху слишком большие здесь?! Если бы вы предложили другое промежуточное ПО для обмена сообщениями в этом случае?
TCP гарантируется доставка (когда он подключен) - вы должны проверить, не произошло ли соединение, и помещать сообщения в очередь при повторном подключении. Как только он увидит, что соединение поддерживает резервное копирование, выгрузите очередь в сокет TCP.
Также изучите TCP Keepalive для распознавания нисходящего соединения: http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html
Похоже, вы могли использовать оболочку сообщений, такую как Java JMS, используя режим надежной надежности. Я не делал этого сам, в контексте текстовых сообщений, но эта идея может привести вас к правильному ответу. Кроме того, может быть уже написанная библиотека Apache, которая обрабатывает то, что вам нужно, например, Qpid.