Wpis z mikrobloga

Piszę aplikację desktopową klient-serwer.
1. Chciałbym aby dany wątek serwera raz był połączony z 1-szym klientem ( i odbierał dane przez read ) potem po upływie czasu ( lub odpowiedniej wiadomości odebranej od 1-szego klienta ) zaczął słuchać 2-giego klienta ( musiałby móc przerwać "zawieszenie" na read ). Czy da radę to zrobić na socketach czy trzeba używał chaneli?
2. Jak w rozmowie na odpowiednim strumieniu/buforze ( zależy czy skorzystam z socketa czy chanela ) przesyłać obiekt?
Rozmowa polegałaby na odbierz obiekt, odpowiedz i tak w kółko ( call - back ), aż do zmiany na słuchanie drugiego klienta i to samo. Jak takie coś mogłoby wyglądać na buforze ( java.nio ), a jak na sturmieniu ( java.io )?

#java #programowanie
  • 10
Mirki, pytanie W wielu wypowiedziach słyszę że tan


@Lewo:
1. Generalnie jak masz 1 wątek serwera to jesteś w stanie obsłużyć pierwszego klienta, kolejnego nie obsłużysz bo pierwszy wisi nadal na tym samym wątku.
2. Serializacja obiektu?
@9405: serwer paruje graczy, tworzy im wątek gdzie grają w grę turową. gracz jak chce wykonać ruch to musi na swojej turze ( wtedy serwer słucha jego strumienia ) wysyła odpowiednią prośbę na strumień, kończy mu się tura, serwer przełącza się na słuchanie drugiego i to samo.

Problem jest z tym, że serwer musi w pewnym momencie przerwać słuchanie ( koniec czasu tury lub gracz nacisnął przycisk "koniec tury" ) i
@Lewo DI odpowiedzią na Twoje pytania :p. Odpowiednia konfiguracja kontenera powinna Ci pozwolić tworzyć obiekty per wątek, per klient itd.
@Lewo: Spróbuj select/poll. Te funkcje potrafią wybrać jeden z kilku deskryptorów (np. połączeń od klienta), które mają jakieś dane do obsłużenia. Jeden wątek potrafi wtedy obsługiwać różnych klientów, w zależności od tego, który pierwszy coś zrobi.
@didijo: jaka to jest klasa? bo jeśli mówisz o selektorze z java.nio to czytałem, ale tutaj tura jest określona a nie kto coś napisze to odbieram

Ogólnie póki co poradziłem sobie z problemem. Serwer nie czyta od razu, tylko mam na wejście mam bufferreader i jest nieblokująca metoda ready() która zwraca czy jest coś do czytania ( czyli czy gracz coś zagrał ) i w pętli dopóki nie skonczy się czas