[Java] Listener dla portu UDP


(kostek135) #1

Czytałem trochę aplikacji na necie i o ile strona clienta do tego co chce napsiać jest prosta, bo wszystko sobie podłacze pod guzik zapakuje i wyśle o tyle część serwera jest dla mnie trochę nie zrozumiała. Generalnie serwer musi czekać na jakimś porcie na przesłane dane, tylko każdy program jaki znalazłem w necie zawierał coś na wzór tego, że tworzony został wątek który jak idiota kręcił się w pętli (while(true) o zgrozo) oczekując na dane. Czy można byłoby jakoś podczepić listener który będzie oczekiwał na to, aż coś przyjdzie na port i zostanie obudzony by to obsłużyć w tym momencie, a po obsłużeniu znów sobie zaśnie?


(nnick) #2

Czy ja wiem czy tak idiotycznie? Funkcja receive domyślnie nie posiada ustawionego timeoutu oczekiwania na pakiet, zatem dopóki czegoś nie dostanie to stoi wstrzymując tym samym dalsze wykonywanie kodu w wątku. Zatem jak Ci zależy to możesz po prostu stworzyć własny event odebrania danych który będzie miał miejsce zawsze po wywołaniu receive


(Krzkaczor) #3

Nie znam żadnej innej metody. To jest po prostu programowanie na dość niskim poziomie więc nie oczekuj cudów :wink: Jednakże nikt Ci nie broni opakowania tego w jakiś listener czy cokolwiek.


(kostek135) #4

Nie uwierze, że na serwerach gdzie może się łaczyć po kilka tysięcy aplikacji jednoczesnie na kazdym porcie w kółku kręci się wątek, bo a nuż coś przyslą.

Jak dla mnie trzeba będzie zrobić osobny wątek to nie ulega wątpliwości, ale nie wyobrażam sobie, żeby na kilkuset wątkach przełączać kontekst procesora, tylko po to zeby się dowiedziec ze się krecą w pętli nic nie robiąc, chciałbym je tylko dopóki nic nie przyjdzie na port uspić, aby nie zużywały procesora, w sumie może event będzie dobrym pomysłem, zobacze jak wyjdzie w praniu, w każdym razie dzieki za jakiś punkt zaczepienia.