Отправка сообщений по ненадежной сети в JAVA

1

Мне нужно отправить непрерывный поток сообщений (простые текстовые сообщения с временной меткой и координатами x/y) по беспроводной сети с движущегося компьютера. Будет много таких коротких сообщений (например, 200 в секунду), и, к сожалению, сетевое соединение, скорее всего, ненадежное, поскольку отправляющее устройство время от времени покидает зону WLAN... Когда соединение недоступно, все предстоящие сообщения должен буферизоваться до тех пор, пока соединение не будет снова восстановлено. Порядок передаваемых сообщений не имеет значения, поскольку они содержат временную метку, но все сообщения должны быть переданы.

Какой простой, но надежный метод отправки этих телеграмм? Можно ли использовать простое соединение TCP или UDP? Будут ли буферизироваться сообщения, когда соединение временно отключится и будет отправлено автоматически? Или потеря связи напрямую обнаружена и отправлена, поэтому я могу буферизовать сообщения и периодически пытаться повторно подключаться самостоятельно? Нужны ли библиотеки, такие как Netty?

Я также подумал об использовании брокера для посреднической связи (например, сети посредников ActiveMQ) в качестве альтернативы. Наверху слишком большие здесь?! Если бы вы предложили другое промежуточное ПО для обмена сообщениями в этом случае?

Теги:
sockets
netty
activemq

2 ответа

0
Лучший ответ

TCP гарантируется доставка (когда он подключен) - вы должны проверить, не произошло ли соединение, и помещать сообщения в очередь при повторном подключении. Как только он увидит, что соединение поддерживает резервное копирование, выгрузите очередь в сокет TCP.

Также изучите TCP Keepalive для распознавания нисходящего соединения: http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html

  • 0
    В прошлом я обнаружил, что иногда сообщается о соединении, даже если оно действительно потеряно. Keepalive, я думаю, отключил соединение не достаточно быстро, но я перепроверил это для соединений WLAN. Тем не менее, вы рекомендуете какую-то дополнительную библиотеку для этого или просто используете классы JDK и делаете все самостоятельно?
  • 0
    @Ingo Оставь в живых и на другом конце. Отправьте живой пакет при отсутствии ответа, и если нет ответа от живого пакета, считайте его мертвым. Я не знаком ни с какими библиотеками, но я уверен, что есть некоторые там.
0

Похоже, вы могли использовать оболочку сообщений, такую как Java JMS, используя режим надежной надежности. Я не делал этого сам, в контексте текстовых сообщений, но эта идея может привести вас к правильному ответу. Кроме того, может быть уже написанная библиотека Apache, которая обрабатывает то, что вам нужно, например, Qpid.

  • 0
    Как я уже упоминал, я также рассмотрел ActiveMQ, который поддерживает JMS, а также AMPQ, но я не знаю, насколько это повлияет на производительность. Может быть, мне нужно реализовать прототип, протестировать его ... Что касается "Гарантированного постоянства": разве это не нужно только тогда, когда сообщения необходимы, чтобы "пережить" сбой? Даже без настойчивости сообщения должны стоять в очереди.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню