Як керувати сесіями через UDP для сервера проміжного мосту між кількома клієнтами і службовим сервером? - linux, мережеве програмування, udp

Мені потрібно зробити такий мост, як наведено нижче. Це просто сервер UDP, який отримує пакети від клієнтів, перенаправляє його на інший сервер. Цей сценарій буде добре зрозумілий фігурою.

+--------+sendto()  recvfrom()+-----------+
| client |------------------->|           |                         +-------------+
|        |        1           | bridge    |sendto()      recvfrom() |             |
|        |                    |           |------------------------>|    duty     |
|        |                    |           |           2             |   server    |
|        |                    |           |recvfrom()      sendto() | processing  |
|        |                    |           |<------------------------|             |
|        |recvfrom()  sendto()|           |            3            |             |
|        |<-------------------|           |                         +-------------+
+--------+         4          +-----------+

Тут функція для відправлення та отримання данихнаписані уздовж пристрою. Процеси комунікації ідентифікуються числами 1,2,3 і 4, під знаками стрілки. Я намагався намалювати фігуру таким чином, що вона може відображати часову шкалу: зверху вниз.

Тепер прийди до цього.Коли я можу керувати лише одним клієнтом, дуже легко це зробити. Але припустимо, клієнтський номер може бути багато. Припустимо, що клієнти є телефонами, підключеними до Інтернету за допомогою дозвону, а сервер - це SIP-сервер, що використовує Asterisk / Freeswitch або щось подібне. У такому сценарії багато клієнтів можуть бути присутніми. Я не хочу використовувати сервер міст як проксі-сервер (працює kamailio та rtpproxy), так що спілкування може бути ефективним.

Asterisk або SIP-сервер може керувати udp-сесіямиЯ знаю. Але як може міст. Оскільки udp не підтримує сеансів, як я можу завершити четвертий крок. Як я можу визначити відповідь службового сервера для клієнта? Який тип програмного забезпечення (звичайно, легкий вага для ефективності, і я сам повинен його записати) повинен бути написаний для обробки сеансів. Якщо хто-небудь може дати мені уявлення про керування сесіями за допомогою udp, це буде дуже корисним для мене. Я багато шукав, але не знайшов відповідної відповіді.

Заздалегідь спасибі.

Відповіді:

1 для відповіді № 1

Ось алгоритм, який я використовував для загальної реалізації проксі для трафіку TCP / UDP:

Програмні модулі:

One Creator і кілька проксі-працівників

Вони реалізуються як самостійні потоки.

Потік:

Модуль Творця несе відповідальність за прийняття таобробляти нові з'єднання. Він інформує та передає вихідні дані працівнику, який з цього моменту буде обробляти всі входи / виходи для цього з'єднання, паралельно він відкриє з'єднання з іншою стороною (може бути зроблено також у працівника).

Працівник отримає зв'язок і несе відповідальність за це протягом його життєвого циклу.

Деякі технічні моменти:

З'єднання UDP визначається IP та PORT (SRC і DEST).

Творець може чекати повідомлень з усіх джерел, а працівник може чекати повідомлень із певного джерела (шляхом прив'язки сокету UDP).

Для виконання робітники повинні відповідати кількостісердечники система має і дозволяє кожному обробляти Async розеток. Крім того, якщо працівник керує кількома гніздами, необхідно встановити алгоритм для завантаження балансу між працівниками, коли Творець / Бос розподіляє нові з'єднання.


Схожі запитання
Найбільш популярний