Как да управлявате сесии чрез 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

Ето един алгоритъм аз използвах на обща изпълнение Proxy за TCP / UDP трафик:

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

Един създател на свързвания и няколко служители на прокси сървър

Те се изпълняват като самостоятелни конци.

поток:

Модулът Създател е отговорен да приеме иработа с нови връзки. Тя информира и предава първоначалните данни на работник, който ще се справя от тази точка с всички I / O за тази връзка, паралелно ще отвори връзка с другата страна (може да се направи и при работника).

Работникът ще получи връзка и ще бъде отговорен за него по време на жизнения му цикъл.

Някои технически точки:

Услугата UDP се определя от IP и PORT (SRC и DEST).

Създателят може да чака съобщения от всички източници, докато работникът може да чака съобщения от конкретен източник (чрез свързване на UDP гнездото).

За изпълнение, работниците трябва да отговарят на броя наядра на една система има и позволява на всеки да се справя с асинхронни гнезда. Освен това, ако даден работник обработва няколко гнезда, трябва да бъде поставен алгоритъм за натоварване на баланса между работниците, когато създателят / шефът разпространява нови връзки.


Свързани въпроси
Най - известен