Cum de a scrie un chat pe java! (Probleme)

Cum de a scrie un chat pe java! (Probleme)

aici este opinia mea umil despre chat-uri:

Crearea de fire separate și ascultarea socketurilor este o mulțime de lucruri inutile. Pentru a simplifica acest proces, puteți utiliza tehnologia Java RMI. În acest caz, clientul și serverul vor furniza un obiect la distanță. Serverul va oferi un obiect de logare și logon și obiecte pentru trimiterea mesajelor. Client - va oferi un obiect ale cărui metode serverul poate apela, de exemplu, pentru a trimite mesaje către client.







Schema generală este următoarea:
Serverul creează un obiect comun pentru toți clienții, care oferă clientului un serviciu de înregistrare (logare). Toți clienții apelează metodele acestui obiect la distanță pentru a intra în chat. De exemplu, obiectul va avea o metodă de autentificare (String nume, char [] parola, MyCallbackObject clientCallback) și retur (în cazul unui succes de conectare) la obiectul cu metodele (mesajul String) SendMessage. Clientul va apela această metodă atunci când dorește să trimită un mesaj.

Serverul creează un grup de obiecte de feedback pentru clienți. Această piscină conține informații despre clientul și clientul MyCallbackObject clientCallback. Imediat ce serverul trebuie să trimită un mesaj clientului, acesta va selecta obiectul clientCallback de la client și va apela metoda lui (de exemplu) sendMessage (mesajul String). Deci, clientul va primi mesajul său.







Avantajele acestei abordări sunt lipsa unui ciclu constant de ascultare pentru prize. Mai exact, acest ciclu va fi ascuns de noi de mecanismele de nivel înalt ale RMI.

Îmi cer scuze, dacă este confuz. Este recomandabil să vă familiarizați mai întâi cu RMI, atunci imaginea este mult mai clară. Cu toate acestea, acestea sunt doar ideile mele gratuite.

in.read () pare să aștepte până se blochează, adică până când vor apărea datele, avem o blocare care nu poate fi îndepărtată. Dar aceasta este IMHO, nu o problemă, pentru că. pentru fiecare client conectat, puteți crea pur și simplu un Thread separat, care îl va asculta numai. Sau este posibil altfel?


Există mai multe opțiuni, metoda read ()
  • int read () - într-adevăr blocabil
  • int citiți (byte [], int, int) - fără blocare

Problema am este că, atunci când a lansat pe fiecare client pe un fir separat pentru a citi un server, citirea este normalno.No imediat ce am rulat un alt fir de pe server, care atinge fiecare al doilea prize clienții și le trimite anumite informații, atunci Subiectul în care citește de la clienți ar trebui să apară - nimic nu le citește deloc.


Fără cod, este greu să spui ceva.

Crearea de fire separate și ascultarea socketurilor este o mulțime de lucruri inutile. Pentru a simplifica acest proces, puteți utiliza tehnologia Java RMI.


Este posibil, dar există unele probleme:
1. Optimizarea serverului pentru performanță va fi problematică (și RMI este încă o tehnologie destul de foame)
2. Clienții pot fi numai în Java

și să se întoarcă (în cazul unei autentificări reușite) va exista un obiect cu metode sendMessage (mesaj String). Clientul va apela această metodă atunci când dorește să trimită un mesaj.


Ceea ce nu am înțeles, ce se va întoarce, ce fel de obiect?

P.S. Pe această temă vă recomandăm să citiți: Mesagerie instantanee în Java: Protocoalele Jabber. La mine ca undeva leagă într-un fel electronic.







Articole similare

Trimiteți-le prietenilor: