Wielowątkowy serwer w Javie

279 views
Skip to first unread message

Piotr Prusiński

unread,
May 14, 2012, 1:08:18 PM5/14/12
to Warszawa Java User Group (Warszawa JUG)
Witam Serdecznie,

Mam pewien problem , a mianowicie mam do zrobienia wielowątkowy serwer
który będzie obsługiwał wielu klientów na raz i z pewnym opóźnieniem
odsyłał wiadomość. Każdy wątek ma rozmawiać ze swoim klientem...
Zrobiłem to za pomocą class Socket i SerwerSocket .Problem polega
na tym ,że jak klienta i serwer odpalę na jednym komputerze to serwer
rozmawia sam ze swoimi wątkami.... Czy to normalne i jak odpalę
klienta na innym komputerze to będzie działać jak należy dzięki
adresacji IP? Czy muszę użyć do tego RMI?
Z góry dziękuję.

Olaf Matyja

unread,
May 14, 2012, 1:41:30 PM5/14/12
to warsza...@googlegroups.com
Sockety, IP... to jest technologia bardzo niskopoziomowa.
Trochďż˝ jak robienie aktywnych stron w CGI, albo pisanie aplikacji
desktopowej w asemblerze.
Mo�na, ale wszystko trzeba obs�ugiwa� samemu, ka�dy wyj�tek, zerwanie
po��czenia...

Jak rozumiem (skoro wspominasz RMI) twoimi klientami sďż˝ jakieďż˝ aplikacje.
Poszukaj na sieci tematu "Web Services".
To siďż˝ w Javie naprawdďż˝ bardzo prosto robi.

Pozdrawiam,
Olaf

-----Original Message-----
From: warsza...@googlegroups.com
[mailto:warsza...@googlegroups.com]On Behalf Of Piotr Prusi�ski
Sent: Monday, May 14, 2012 7:08 PM
To: Warszawa Java User Group (Warszawa JUG)
Subject: [warszawa-jug] Wielow�tkowy serwer w Javie


Witam Serdecznie,

Mam pewien problem , a mianowicie mam do zrobienia wielow�tkowy serwer
kt�ry b�dzie obs�ugiwa� wielu klient�w na raz i z pewnym op�nieniem
odsy�a� wiadomo��. Ka�dy w�tek ma rozmawia� ze swoim klientem...
Zrobi�em to za pomoc� class Socket i SerwerSocket .Problem polega
na tym ,�e jak klienta i serwer odpal� na jednym komputerze to serwer
rozmawia sam ze swoimi w�tkami.... Czy to normalne i jak odpal�
klienta na innym komputerze to b�dzie dzia�a� jak nale�y dzi�ki
adresacji IP? Czy musz� u�y� do tego RMI?
Z g�ry dzi�kuj�.

--
Wiadomo�� z grupy Warszawa Java User Group (Warszawa JUG).
Wi�cej informacji na stronie
http://groups.google.com/group/warszawa-jug?hl=pl
Zach�camy do odwiedzenia naszej strony domowej http://warszawa.jug.pl
Oferty pracy dozwolone zgodnie z zasadami na
http://sites.google.com/site/warszawajug/oferty-pracy-na-grupie

Tomek Nurkiewicz

unread,
May 14, 2012, 1:42:17 PM5/14/12
to warsza...@googlegroups.com
Jeśli przez "serwer rozmawia sam ze swoimi wątkami" masz na myśli, że klient i serwer są na tej samej maszynie (jako dwa osobne JVMy) i komunikują się po interfejsie localhost - wszystko w porządku. Jeśli umieścisz klienta na innej maszynie i jako adres serwera podasz odpowiednie IP - po prostu zadziała. Oczywiście przy założeniu, że host jest osiągalny, nie blokuje firewall, etc. - ale to już nie problem Javy. Nawiasem mówiąc właśnie tak testujesz np. aplikacje webowe: serwer (np. Tomcat) jest na Twoim komputerze i przeglądarka (klient) też.

Nie potrzebujesz też RMI (chociaż jest o wiele łatwiej niż na zwykłych socketach). Zresztą - samo RMI przecież używa socketów pod spodem.

Pamiętam jedynie, że kiedyś próbując sklastrować EhCache nijak węzły nie mogły się odnaleźć w sieci. Okazało się, że ServerSocket tworzony przez tą bibliotekę nasłuchiwał tylko na lokalnym interfejsie (loopback) i konfiguracja działała jedynie gdy wszystkie węzły pracowały na jednej maszynie... Podobnie JBoss wymaga podania explicite, że ma nasłuchiwać nie tylko na 127.0.0.1. W razie problemów przyjrzyj się temu konstruktorowi ServerSocket:


pozdrowienia

--
Tomasz Nurkiewicz
http://nurkiewicz.blogspot.com

Piotr Prusiński

unread,
May 14, 2012, 2:08:31 PM5/14/12
to Warszawa Java User Group (Warszawa JUG)
Dziękuje za odpowiedź. Chciałbym zaznaczyć ,że zadanie polega właśnie
na tym by zrobić to na niskim poziomie komunikacji sieciowej.

Pozdrawiam Piotrek
> http://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#S...)
>
> pozdrowienia
>
> --
> Tomasz Nurkiewiczhttp://nurkiewicz.blogspot.com

Paweł Cesar Sanjuan Szklarz

unread,
May 14, 2012, 2:23:28 PM5/14/12
to warsza...@googlegroups.com

Czesc

Mozesz przerobic przyklad ping.java:
http://docs.oracle.com/javase/1.4.2/docs/guide/nio/example/index.html

A przy okazji poznac nio.

--
Wiadomość z grupy Warszawa Java User Group (Warszawa JUG).
Więcej informacji na stronie http://groups.google.com/group/warszawa-jug?hl=pl
Zachęcamy do odwiedzenia naszej strony domowej http://warszawa.jug.pl

Piotr Jagielski

unread,
May 15, 2012, 4:21:19 PM5/15/12
to warsza...@googlegroups.com
Cześć,

Jak nie chcesz działać tak bardzo niskopoziomowo, to możesz spróbować jakiejś bilioteki, np. ostatnio głośno jest o http://vertx.io/ 
Jest tam jakiś Distributed Event Bus, co prawda piszą o JavaScript client, ale może warto tego spróbować? 
Sam bym chętnie się dowiedział, czy to coś daje coś więcej niż standardowe klasy JDK :)
Reply all
Reply to author
Forward
0 new messages