Ako spravovať relácie prostredníctvom UDP pre stredný mostový server medzi viacerými klientmi a služobným serverom? linux, programovanie siete, udp

Musím vytvoriť most, ako je nasledujúci obrázok. Je to len server UDP, ktorý prijíma pakety od klientov, presmeruje ho na iný server. Scenár bude dobre pochopený na obrázku.

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

Tu funkcia odosielania a prijímania údajovsú napísané pozdĺž bočnej strany zariadenia. Komunikačné procesy sú označené číslami 1,2,3 a 4 pod šípkami. Pokúsil som sa nakresliť obrázok takým spôsobom, aby mohol predstavovať časovú líniu: zhora nadol.

Teraz príde na to.Keď mám spravovať len jedného klienta, je to dosť jednoduché. Predpokladajme však, že počet klientov môže byť veľa. Predpokladajme, že klienti sú telefóny pripojené na internet pomocou dialer a server je SIP server s Asteriskom / Freeswitchom alebo podobným. V takomto prípade môžu byť prítomní mnohí klienti. Nechcem používať mostový server ako proxy server (beží kamailio a rtpproxy), takže komunikácia môže byť efektívna.

Asterisk alebo SIP server môže spravovať udp relácieViem. Ale ako môže most. Ako udp neudržia žiadne relácie, ako môžem dokončiť štvrtý krok. Ako môžem identifikovať odpoveď služobného servera pre klienta? Aký typ softvéru (samozrejme ľahká účinnosť a ja sám potrebujem napísať) by mal byť napísaný na spracovanie relácií. Ak mi niekto môže dať predstavu o riadení relácie cez udp, bude pre mňa veľmi užitočné. Hľadal som veľa, ale nenašiel som vhodnú odpoveď.

Vopred ďakujem.

odpovede:

1 pre odpoveď č. 1

Tu je algoritmus, ktorý som použil na generickú implementáciu Proxy pre prenos TCP / UDP:

Programové moduly:

Jeden tvorca pripojenia a viacerí pracovníci servera proxy

Sú implementované ako samostatné vlákna.

prietok:

Modul tvorca je zodpovedný za prijatie azvládnuť nové pripojenia. Informuje a odovzdáva počiatočné dáta pracovníkovi, ktorý z tohto bodu spracuje všetky vstupy / výstupy pre toto spojenie, paralelne otvorí spojenie s druhou stranou (môže byť vykonané aj v pracovníkovi).

Pracovník dostane spojenie a zodpovedá za ňu počas svojho životného cyklu.

Niektoré technické body:

Pripojenie UDP je určené IP a PORT (SRC a DEST).

Tvorca môže čakať na správy zo všetkých zdrojov, zatiaľ čo pracovník môže čakať na správy z konkrétneho zdroja (väzbou soketu UDP).

Pre výkonnosť by pracovníci mali zodpovedať počtujadrá systému má a umožňuje každému zvládnuť asynchrónne zásuvky. Okrem toho, ak pracovník pracuje s viacerými zásuvkami, musí byť umiestnený algoritmus na načítanie rovnováhy medzi pracovníkmi, keď Tvorca / šéf distribuuje nové pripojenia.


Súvisiace otázky
Ponuka