ďťż

Ładny brzuch

Pisze program w którym klient bedzie wysyłał serverowi polecenia które bedzie wykonywał. Funkcje beda stałe zaprogramowane w serverze. Pisze to na komponencie client i serversocket na zasadzie:

clientsocket1.socket.SendText('cdopen');
...
s:=serversocket1.Socket.Connections[0].ReceiveText;
if (s='cdopen') then .
...

I zastanawiam sie czy nie przeniesc sie na indy zeby to napisac tylko zastanawiam jeszcze jak...

A problem opisany w temacie to sprawa własnie jak zrobic ze jezeli klient wysłał czas który server ma odliczac np. 40 sec zeby był synchoronicznie odliczany na serverze i w kliencie np w jakims edit'cie...

Czyli jezeli nie da sie tego zrobic na tym client i server socket to pomóżcie jak cos podobnego napisac za pomoca indy i jak zrobic taka synchornizacje czasu...



Nie bardzo rozumiem problem. Chcesz wysłąć np. ilość sekund do serwera którą to ilość serwer ma czekać i kilent też? Bo nie bardzo widze samą idee.

Programowi klientowi podamy czas np 40 sec. on ma synchornicznie odliczac od 00:00:40 do 00:00:00 i wyswietlac to w postaci labela czy edita. Synchronicznie na serverze i kliencie
Użytkownik blacha14 edytował ten post 02 styczeń 2008, 18:08

Programowi klientowi podamy czas np 40 sec. on ma synchornicznie odliczac od 00:00:40 do 00:00:00 i wyswietlac to w postaci labela czy edita. Synchronicznie na serverze i kliencie
Czyli najlepiej zrobić na tej zasadzie:
-> do serwera wysyłasz czas
-> serwer np co 5 sek przysyła programowi czas
-> program odlicza u siebie do 0, uwzględniając czasy jakie przyjdą (poprawianie ewentualnego przesunięcia)
I powinno być w miarę równo (opóźnienie nie powinno przekroczyć 1/10s przy łączu normalnej prędkości) :)




Czyli najlepiej zrobić na tej zasadzie:
-> do serwera wysyłasz czas
-> serwer np co 5 sek przysyła programowi czas
-> program odlicza u siebie do 0, uwzględniając czasy jakie przyjdą (poprawianie ewentualnego przesunięcia)
I powinno być w miarę równo (opóźnienie nie powinno przekroczyć 1/10s przy łączu normalnej prędkości) :)


Ale po co przesyłać co 5 sek czas ? Wystarczy, że ktoś będzie coś ściągał, albo będzie miał Neozdrade, a opóźnienia będą tragiczne

Ja bym to zrobił tak, że
1. Synchronizuje zegarki obu komputerów z jakimś niezależnym serwerem czasu.
2. Później w kliencie ustawiam odpowiednio wcześnie, żeby np. o 18:43:00 rozpoczął odliczanie od 40 w dół.
3. Wysyłam do serwera polecenie żeby rozpoczął odliczanie o 18:43:00 od 40 w dół.
4. Odliczanie rozpoczyna się o 18:43:00 i kończy o 18:43:40 na obu komputerach w tym samym czasie.
Użytkownik DEV edytował ten post 02 styczeń 2008, 18:48

Ale po co przesyłać co 5 sek czas ? Wystarczy, że ktoś będzie coś ściągał, albo będzie miał Neozdrade, a opóźnienia będą tragiczne

Ja bym to zrobił tak, że
1. Synchronizuje zegarki obu komputerów z jakimś niezależnym serwerem czasu.
2. Później w kliencie ustawiam odpowiednio wcześnie, żeby np. o 18:43:00 rozpoczął odliczanie od 40 w dół.
3. Wysyłam do serwera polecenie żeby rozpoczął odliczanie o 18:43:00 od 40 w dół.
4. Odliczanie rozpoczyna się o 18:43:00 i kończy o 18:43:40 na obu komputerach w tym samym czasie.

A poto żeby nie synchronizować czasu z serwerem czasu. Opóźnień nie będzie wielkich jeżeli rozpoczniemy odliczanie jak dostaniemy odpowiedź na serwerze a potem przy każdym otrzymanym czasie poprawimy jeżeli otrzymany czas do końca odliczania będzie mniejszy niż ten lokalny. I opóźnienie będzie nie większe niż przy serwrze czasu (pamiętaj że pobranie z serwera czasu też pozostawi opóźnienie więc imo byłaby to gorsza metoda).

Hmm a teraz siedze i mam problem z kodem. Ustalając ze server bedzie w sieci lan to nie powinno byc az takich opóźnien a małe nuc nie szkodzi chodzi o to zeby nie było tam np 10 sec opuźnienia. Tylko teraz zastanawiam sie jak napisac zeby po wpisaniu do programu '40 sec' od ustawił zegar na 00:00:40 i odliczał w dół... mysle probuje ale zeby to dobrze wszystko pracowało to mi troche brakuje


Hmm a teraz siedze i mam problem z kodem. Ustalając ze server bedzie w sieci lan to nie powinno byc az takich opóźnien a małe nuc nie szkodzi chodzi o to zeby nie było tam np 10 sec opuźnienia. Tylko teraz zastanawiam sie jak napisac zeby po wpisaniu do programu '40 sec' od ustawił zegar na 00:00:40 i odliczał w dół... mysle probuje ale zeby to dobrze wszystko pracowało to mi troche brakuje
Ustawiasz odliczanie na 40 s i w timerze decremetujesz.


I opóźnienie będzie nie większe niż przy serwrze czasu (pamiętaj że pobranie z serwera czasu też pozostawi opóźnienie więc imo byłaby to gorsza metoda).

Z serwerem czasu synchro jest tylko raz na początku i od tego momentu oba zegary chodzą identycznie i nie ma żadnych opóźnień związanych z przesyłaniem czasów po sieci, nie trzeba się babrać z synchronizacją i korektą czasów klient - serwer.


Z serwerem czasu synchro jest tylko raz na początku i od tego momentu oba zegary chodzą identycznie i nie ma żadnych opóźnień związanych z przesyłaniem czasów po sieci, nie trzeba się babrać z synchronizacją i korektą czasów klient - serwer.
A to ciekawe. W takim razie jak przebiega taka synchronizacja? Bo miałem wrażenie że jest to zwykłe zapytanie serwera o czas, co pozostawiłoby opóźnienie.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •