2015-11-06 2 views
3

Я попытался реализовать UDP-сервер с использованием Spring Integration, как описано here, но когда клиенты работают за NAT, они никогда не получат ответы от сервера. Это потому, что сервер должен отправлять ответные дейтаграммы из того же порта, что и порт адаптера UDP (проверьте UDP через NAT, объясненный here).Spring Integration UDP-сервер для клиентов за NAT

Как я могу достичь надлежащей связи UDP с клиентами за NAT с использованием Spring Integration?

ответ

1

Как обсуждалось в этих потоках; в настоящее время нет шлюзов для UDP, только адаптеры каналов. Шлюзы используются для двусторонней интеграции.

Для UDP-шлюзов на протяжении многих лет не было никакого спроса.

Мы сделали make some changes, чтобы пользователи могли отвечать на входящие сообщения (добавив порт отправки как заголовок).

Это позволит вам построить DatagramPacket (возможно, используя SI DatagramPacketMessageMapper) и отправить его в исходную систему, используя собственный код.

Если вы хотите, чтобы мы пересмотрели предоставление шлюзов UDP, сделайте комментарий к JIRA Issue. Еще лучше, рассмотрите contributing.

EDIT

Для асинхронных присылает вам не нужен шлюз; покупайте, вам нужно настроить обработчик и обработчик сообщений, который встроен в исходящий адаптер.

Измените DatagramPacketMessageMapperhere, чтобы установить socketAddress используя заголовки сообщений; и добавьте опцию в UnicastSendingMessageHandler, чтобы она не безоговорочно установила destinationAddresshere.

Вы можете сделать это путем подклассификации обработчика и переопределения метода send().

Затем вы можете подключить настроенный обработчик сообщений к <service-activator/>, используя атрибут ref.

+0

Вау! Спасибо, Гэри, за очень быстрый ответ! Я очень хотел бы внести свой вклад. Или попробуй хотя бы. Я прочитал общие правила для авторов, но мог ли ты указать мне какой-то пример шлюза, на котором я мог бы основываться? Или дайте мне какой-нибудь быстрый совет, где я должен смотреть в существующем коде SI? Я должен иметь возможность отправлять ответы от того же порта, что и порт «udp-inbound-channel-adapter». Я также должен иметь возможность отправлять датаграммы с сервера на клиенты асинхронно. – yu55

+0

См. Изменение в моем ответе. –

+0

Спасибо, Гэри. Надеюсь, скоро я попытаюсь что-то выяснить. – yu55

 Смежные вопросы

  • Нет связанных вопросов^_^