Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Java - Sockets, Co wybrać, jak to wykonać.


Rekomendowane odpowiedzi

Opublikowano

Mam "główny" (nazwe go main#1) server/aplikacje/cośtam (raczej wszystkie będą na jednej maszynie, ale jednak nie koniecznie), I jest on połączony z innymi serverami s#1, s#2, te połączenia mogą zniknąć, lub pojawić się nowe, ale z góry wiadomo jakie to będą połączenia -> czyli jakie są adresy wszystkich tych serverów.

Czyli po prostu czasem jakiś server poboczny może być chwilowo wyłączony.

 

 

PS: Nie mam dostępu do samych połączeń między tymi serverami itd... mogę tylko odczytać że takowe istnieją.

 

 

I teraz kiedy main#1 wykonuje pewną akcje, związaną z np s#2, ja chce wysłać do s#2 drobną informacje (max 20 znaków).

s#2 nie ma zielonego pojęcia kiedy ta informacja może przyjść, i musi też odczytać ją jak najszybciej, a main#1 może kontynuować swoją operacje, dopiero jak s#2 odczyta i zapisze tę informację.

 

W socketach jestem raczej zielony, co najwyżej bawiłem się przykładami z oracle, ale to tylko chwilkę.

 

I pytanie jest takie... jakich, i jak socketów tutaj użyć? czy nawiązywać jakieś jedno stałe połączenie, trzymając zwykłe sockety w jakiś mapkach, i cały czas w pętli sprawdzając czy jest jakaś nowa informacja, czy może próbować ServerSocketem cały czas akceptować nowe sockety, gdzie każdy nowe to ta pojedyncza informacja, odczytać ją, i zamknąć socket. Czy może coś z Datagramami itd...

 

 

Te dane mogą być wysyłane dość często, czasem po kilkanaście na sekundę, ale czasem może być i cisza przez kilka minut/godzin. I z tego z pamiętam, to czasem może też iść jednocześnie w kilku wątkach, np jednocześnie mian#1 musi coś zrobić z s#1 i s#2 (dwie osobne rzeczy, dwa osobne wątki) 

 

 

 

 

Tak wiem, tłumacze świetnie. Mam nadzieje że jednak da się to sensownie zrozumieć :D

1438614356923701010629.png

 

Opublikowano
Opublikowano

dlaczego na JavaWorld niektóre nazwy zmiennych zaczynają się z wielkiej litery o.O

 

Ale wracając do pytania...

U mnie będzie ten jeden ServerSocket, i kilka Socektów, tylko teraz jak to jest z tym nawiązywaniem połączenia?

Mam je nawiązać tylko raz, i zapisać obiekt Socket do jakiejś mapki?

I jak wtedy sprawdzić czy połączenie dalej istnieje? (server czasem może niezbyt spodziewanie "paść")

I jak nawiązać je znowu, i wiedzieć które to które? :D

 

Mam ten server main#1 z ServerSocket 

i s#1, s#2... s#n, z Socketem, każdy z nich ma nazwę, każdy z nich może w dowolnym momencie paść i potem pojawić się ponownie (lub nie pojawić)

I chodzi o to jak tego pilnować, jak pilnować który to który, jak wykryć że połaczenie padło, i nasłuchiwać dla nowego od tego samego s#x? 

 

PS: na każdy z nich musze mieć osobny wątek?

1438614356923701010629.png

 

Opublikowano

U mnie będzie ten jeden ServerSocket, i kilka Socektów, tylko teraz jak to jest z tym nawiązywaniem połączenia?

Normalnie. Wszystko masz w poradnikach.

Mam je nawiązać tylko raz, i zapisać obiekt Socket do jakiejś mapki?

Tak. Lepiej w zwykłej liście.

I jak wtedy sprawdzić czy połączenie dalej istnieje? (server czasem może niezbyt spodziewanie "paść")

Masz w poradniku.

I jak nawiązać je znowu, i wiedzieć które to które? :D

Normalnie - połączyć się jeszcze raz. Możesz wysyłać po połączeniu jakieś ID do serwera, żeby identyfikować klientów.

 

na każdy z nich musze mieć osobny wątek?

Nie musisz, lecz jest to dość proste i popularne rozwiązanie, więc najlepiej tak to zrób.

708121422388637873334.png

Opublikowano

Teraz zauważyłem - nie zapisuj do listy Socketów, ale obiekty dziedziczące po wątkach nasłuchujące na dane sockety. I usuwaj je gdy się rozłączy.

To i tak będzie jak zapis socketu, bo i tak ten obiekt-wątek, musi mieć tę zmienną z socketem?

1438614356923701010629.png

 

Opublikowano

Nie musi, ale gdzieś musisz go trzymać. Lepiej by było jakby miał. Prostsze będzie.

to jaka z różnica z zapisem? :D

 

I raczej będę zapisywać do mapki (a nie listy), bo jak już pisałem każdy z nich ma nazwę, i jak będę coś z nimi robić to tylko po nazwie. 

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...