/ / Manipulácia s viacerými vláknami s TCP - java, zásuvky, tcp, sieťové programovanie, chat

Manipulácia s viacerými vláknami s TCP - java, sockets, tcp, programovanie siete, chat

Snažím sa implementovať chatovú aplikáciu a mám návrh na vykonanie výmeny TCP / UDP na výmenu správ medzi rovesníkmi. Chcem používať TCP, ale mám nasledujúci problém.

Scenár problému: Peer A počúva na dobre známom prístave (povedzme 5555). Keď partner B chce poslať správu peerovi A, pripojí sa k portu 5555 na A. Peer A akceptuje spojenie a začne nové vlákno, ktoré sa bude zaoberať komunikáciou s peerom B, takže ostatní peer (napríklad peer C) budú schopní pripojiť sa k portu 5555 typu peer A. Teraz je problémom to, že nejde o protokol požiadavka / odpoveď, takže som zmätený, že ak partner A z nejakého dôvodu neodpovedá peerovi B, potom budú nasledujúce správy odoslané B doručené do portu 5555 na rovnocennom serveri A? a partner A vytvorí samostatné vlákna pre každú z prijatých správ?

Použitie UDP pravdepodobne vyrieši tento problém a janemusia vytvárať samostatné vlákna pre komunikáciu s každým rovnocenným počítačom a každý môže posielať správy na rovnaký známy port. Chcem však na zabezpečenie doručenia správ použiť protokol TCP. Nejaké nápady, aký by bol dobrý spôsob riešenia tohto problému a na komunikáciu s jedným rovesníkom sa použilo iba jedno vlákno?

odpovede:

2 pre odpoveď č. 1

Problém, ktorý opíšete, sa nestal, pretože TCPje „pripojený“ protokol, čo v podstate znamená, že dvaja rovesníci musia vyjednávať komunikáciu skôr, ako sa môže stať čokoľvek iné. Potom TCP kontroluje poradie dátových paketov, aby sa ubezpečil, že dorazia na miesto určenia a v správnom poradí. BTW, TCP je skratka pre Transmission Control Protocol, takže kladie veľký dôraz na to, aby ste sa ubezpečili, že to, čo ste opísali, sa nestane. V prípade UDP to vôbec nie je.

Akonáhle vaše ServerSocket prijal pripojenie od klienta Socket, vyjednávanie bolo ukončené a na túto komunikáciu je vyhradený prúd TCP.

Jediný spôsob, ako vytvoriť nový, je, ak váš klient vysiela ďalšie pripojenie prostredníctvom nového Socket.

Najlepším spôsobom, ako sa presvedčiť, je pridať do aplikácie protokolovanie a vyskúšať to sami.


2 pre odpoveď č. 2

Ste mätúci načúvaniealebo server, zásuvky a spojený zásuvky.

Akonáhle je pripojenie TCP akceptované pri počúvaníNa druhej strane máte medzi dvoma stranami úplne nový duplexný soket, aby si mohli vymieňať údaje. Jediným účelom počúvania soketu je akceptovať spojenia, cez ktoré cez ne nepretekajú žiadne aplikačné dáta.

Túto novú pripojenú zásuvku môžete odovzdať dovlákno, ale určite to nemusíte - môžete zvládnuť veľa neblokujúcich soketov v jednom vlákne, verím, že na tento účel bol vytvorený balík Java NIO.