🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #153704

Re: Java i automatyczne wznawianie połączenia klienckiego socket

#153704
From: TrzyLinie
Date: Mon, 10 Dec 2012 19:55
31 lines
3074 bytes
W dniu 2012-12-09 16:29, Artik napisał(a):
> Próbuje to zrealizować tworząc dwa wątki - jeden - najważniejszy dla usługi - służy do wysylania cyklicznie danych do serwera, drugi thr1 sluży do sprawdzania czy nie było awarii w pierwszym wątku (socket polaczenia ustawiam na null w wyniku obsługi wyjątku błedu połączenia) i wówczas wywołuje metodę:

W Twoim przykładzie nie widać protokołu - bez tego raczej się nie da...
Musisz zdefiniować jakiś protokół - czyli kiedy, co i kto wysyła, oraz jaka
jest odpowiedź na to, co odebrano od partnera - dotyczy to i klienta i serwera.

Obsługa błędów tez powinna być przewidziana w protokole.

Jeden klient = jeden wątek w serwerze.

Wątek w serwerze obsługujący klienta i wątek klienta powinny być na oko dość
symetryczne - odpowiadają za obsługę protokołu.

Żadnych sleep() w wątkach tego rodzaju! Synchronizacja nastąpi na strumieniach
utworzonych na gniazdku - jak serwer wywoła "read", to zatrzyma swoje działanie
do momentu, aż klient czegoś nie "write" i odwrotnie. Na tym polega protokół.
Kiedy, co i kto robi jakieś "write" i jaka będzie na to odpowiedź ("read")
- to jest właśnie protokół.

Na oko widać, że idziesz w kierunku protokołu tekstowego, więc używaj strumieni,
w których ogranicznikiem będzie \n - strumienie z metodami readLine i println
będą odpowiednie i zapewnią konieczną synchronizację.

> Wznowienie nastepuje ale ponownie wlaczony serwer po przerwie - otrzymuje kilkanascie prob rozpoczęcia polaczenia ze strony przedstawionego klienta. Jak czas niedostępności serwera jest zbyt dlugi - aplikacja kliencka niestety "pada":(

Kilkanaście prób, bo u Ciebie chyba robi się kilkanaście wątków, które próbują
"wznawiać" połączenie. Te pętle ze sleepami to genialne wylęgarnie hazardów :)

-- 
TrzyLinie
Technical Details
Message-ID: <ka5eo8$qq5$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail
References: <8da568b8-c14e-42d2-97a4-e872c6eb8675@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin1!goblin.stu.neva.ru!eternal-september.org!feeder.eternal-september.org!mx04.eternal-september.org!.POSTED!not-for-mail
From: TrzyLinie <trzyKASUJlinie@USUNo2.pl>
Newsgroups: pl.comp.lang.java
Subject: Re: Java i automatyczne wznawianie połączenia
 klienckiego socket
Date: Mon, 10 Dec 2012 20:55:51 +0100
Organization: A noiseless patient Spider
Lines: 31
Message-ID: <ka5eo8$qq5$1@dont-email.me>
References: <8da568b8-c14e-42d2-97a4-e872c6eb8675@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Mon, 10 Dec 2012 19:55:52 +0000 (UTC)
Injection-Info: mx04.eternal-september.org; posting-host="5213da809591a40a20e26ab95b9f6568"; logging-data="27461"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/QzodJhnpsrFae9SjWACOLGqGeJUUdaX4="
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/17.0 Thunderbird/17.0
In-Reply-To: <8da568b8-c14e-42d2-97a4-e872c6eb8675@googlegroups.com>
Cancel-Lock: sha1:l/liZDM+1t87nqJyDLdL4dkHXuo=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit