Server Tcp, serwer nie rozłącza się

Odpowiedz Nowy wątek
2018-11-15 10:11
0

Mam poniższy problem.
Client wymienia dane z serwerem, więc takie połączenie istnieje. Problem polega na tym gdy ubije program server tcp, to wątek dalej dla tego połączenia istnieje(program client dalej wymienia dane z serwerem) i nie mogę ponownie uruchomić serwera . W jaki sposób można go poprawnie zamykać?

edytowany 3x, ostatnio: dominikzaq, 2018-11-15 10:19

Pozostało 580 znaków

2018-11-15 10:53
0

nie ubijać serwera tylko go w cywilizowany sposób wyłączyć dbając o to aby serwer podczas zamykania zamknął wszystkie działające wątki


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2018-11-15 10:57
0

Jak można go w cywilizowany sposób wyłączyć?

Pozostało 580 znaków

2018-11-15 10:59
1

Tak, by pozamykał wcześniej wszystkie wątki, poinformował klientów o tym, że idzie do aniołków itd.

No ale oczywiście nie zawsze się tak da (bo np. maszynę na której stoi trafi meteor), więc dobrze by było, żeby klient umiał interpretować dłuższy brak komunikacji z serwerem jako problemy tegoż i odpowiednio na to reagował. Szczegóły tutaj zależą oczywiście od tego, co to za serwer, co to za klient i czemu to wszystko służy.

Pozostało 580 znaków

2018-11-15 11:01
0

Do obsługi połączenia korzystasz z modułu socket? Wysyłasz metodą send?
powinna zwracać ona błąd w przypadku problemu z połączeniem

    try:
        s.send(bytes('hello', 'UTF-8'))
    except socket.error, e:
        if e.errno == errno.ECONNRESET:
            # Handle disconnection -- close & reopen socket etc.
        else:
            # Other error, re-raise
            raise
edytowany 1x, ostatnio: Arthan, 2018-11-15 11:02

Pozostało 580 znaków

2018-11-15 11:04
0

timeout mam ustawiony, bo mam kilku użytkowników(clientów) np. 2minut i 5minut dla innego, i timeout odpadają. Nie moge sobie pozwolić na tak długi czas działania systemu. Będe musiał pomyśleć nad tym jeszcze.

Arthan chyba nie mogę tego użyć bo wtedy timeout do połączenia ustawione nie zadziałają chyba że się myle. Albo może jest sposób ustawienia timeout dla czytania ramek i wysyłania osobno.

spróbuje może z tym się uda


import atexit
def exit_handler():
   print ('My application is ending!')

atexit.register(exit_handler)

while True:
  print("test")

program screen uruchamia program w pythonie oraz też zrobiłem skrypt do kilowania screena. Może w tym jest problem po skilowaniu screena nie zamyka się wszystko

edytowany 4x, ostatnio: dominikzaq, 2018-11-16 10:42

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0