Jak zaprojektować komunikację między klientem a serwerem czatu? Jak na razie mam po stronie serwera klasę User która zawiera:

-pola takie jak login i hasło

-gettery

-wątek który oczekuje na zapytania klienta i odpowiada na nie

-kolejkę (PriorityQueue) do której dodawane są przez inne instancje klasy User, reprezentujące innych użytkowników, wiadomości przychodzące do tego usera

Po stronie klienta mam klasę zarządzającą inputami. Do taj klasy przychodzą wszystkie dane wysłane przez serwer (wszystko działa na socketach), a klasy, do których docelowo ma się dostać dana wiadomość, biorą sobie te wiadomości poprzez gettery. Niestety jak można było się spodziewać nie działa to dobrze z różnych powodów dlatego prosiłbym o rozpisanie jak byście mi radzili zrobić komunikacje między serwerem a klientem. Robić to dalej na socketach? (co do komunikacji, przez sockety przesyłam obiekty Message zawierające nagłówek i wiadomość i w razie potrzeby nadawcę i adresata) Może są jakieś sprawdzone sposoby których nie znam? Z góry dzięki za pomoc.