-
11. Data: 2017-10-12 15:58:32
Temat: Re: Wieloużytkownikowy serwer udp?
Od: Roman Tyczka <n...@b...no>
On Thu, 12 Oct 2017 12:40:08 +0000 (UTC), Adam Wysocki wrote:
> Roman Tyczka <n...@b...no> wrote:
>
>> Czyli wołając reqesta do serwera http i używając w nagłówku HTTP pola
>> keep-alive powoduję, że serwer http utrzymuje ze mną aktywne połączenie tcp
>> czyli de facto otwartego socketa? I sobie to połączenie wisi, aż łaskawie
>> zechce mi się (klientowi http) odezwać ponownie?
>
> Tak. Jak masz do wyświetlenia 15 obrazków z jednej domeny, to nie ma sensu
> tworzyć 15 połączeń. Można zrobić keepalive i pobrać wszystkie w jednym.
Ja nie pytam o teorię i logiczne rozwiązanie. Pytam o implementacje na
poziomie serwera HTTP, np. apache.
Jeśli byłaby to prawda to serwery typu fejsbuk miałyby otwarte dziesiątki
milionów socketów i pożarte olbrzymie zasoby na "nie wiadomo co", bo wszak
klient może się więcej nie odezwać a socket musi wisieć, bo nie wiadomo czy
się odezwie czy nie.
--
pozdrawiam
Roman Tyczka
-
12. Data: 2017-10-12 17:05:28
Temat: Re: Wieloużytkownikowy serwer udp?
Od: "M.M." <m...@g...com>
On Thursday, October 12, 2017 at 3:58:34 PM UTC+2, Roman Tyczka wrote:
> On Thu, 12 Oct 2017 12:40:08 +0000 (UTC), Adam Wysocki wrote:
>
> > Roman Tyczka <n...@b...no> wrote:
> >
> >> Czyli wołając reqesta do serwera http i używając w nagłówku HTTP pola
> >> keep-alive powoduję, że serwer http utrzymuje ze mną aktywne połączenie tcp
> >> czyli de facto otwartego socketa? I sobie to połączenie wisi, aż łaskawie
> >> zechce mi się (klientowi http) odezwać ponownie?
> >
> > Tak. Jak masz do wyświetlenia 15 obrazków z jednej domeny, to nie ma sensu
> > tworzyć 15 połączeń. Można zrobić keepalive i pobrać wszystkie w jednym.
>
> Ja nie pytam o teorię i logiczne rozwiązanie. Pytam o implementacje na
> poziomie serwera HTTP, np. apache.
> Jeśli byłaby to prawda to serwery typu fejsbuk miałyby otwarte dziesiątki
> milionów socketów [...]
10mln podziel na 60tys komputerów i już nie jest tak strasznie.
Pozdrawiam
-
13. Data: 2017-10-12 18:40:33
Temat: Re: Wieloużytkownikowy serwer udp?
Od: Roman Tyczka <n...@b...no>
On Thu, 12 Oct 2017 08:05:28 -0700 (PDT), M.M. wrote:
>>>> Czyli wołając reqesta do serwera http i używając w nagłówku HTTP pola
>>>> keep-alive powoduję, że serwer http utrzymuje ze mną aktywne połączenie tcp
>>>> czyli de facto otwartego socketa? I sobie to połączenie wisi, aż łaskawie
>>>> zechce mi się (klientowi http) odezwać ponownie?
>>>
>>> Tak. Jak masz do wyświetlenia 15 obrazków z jednej domeny, to nie ma sensu
>>> tworzyć 15 połączeń. Można zrobić keepalive i pobrać wszystkie w jednym.
>>
>> Ja nie pytam o teorię i logiczne rozwiązanie. Pytam o implementacje na
>> poziomie serwera HTTP, np. apache.
>> Jeśli byłaby to prawda to serwery typu fejsbuk miałyby otwarte dziesiątki
>> milionów socketów [...]
>
> 10mln podziel na 60tys komputerów i już nie jest tak strasznie.
Tak czy owak jest to niepotrzebne i ...dziwne.
Istnieje co prawda coś takiego jak websockets, ale to zupełnie inna bajka.
Dlatego dopytuję o szczegóły implementacyjne, a nie o to co wynika z opisu
polecenia http, bo coś czuję, że jednak nie jest to tak implementowane.
Oczywiście mogę się mylić! A lubię zaliczać dysonanse poznawcze tego
rodzaju :-)
--
pozdrawiam
Roman Tyczka
-
14. Data: 2017-10-12 18:49:06
Temat: Re: Wieloużytkownikowy serwer udp?
Od: "M.M." <m...@g...com>
On Thursday, October 12, 2017 at 6:40:34 PM UTC+2, Roman Tyczka wrote:
> On Thu, 12 Oct 2017 08:05:28 -0700 (PDT), M.M. wrote:
>
> >>>> Czyli wołając reqesta do serwera http i używając w nagłówku HTTP pola
> >>>> keep-alive powoduję, że serwer http utrzymuje ze mną aktywne połączenie tcp
> >>>> czyli de facto otwartego socketa? I sobie to połączenie wisi, aż łaskawie
> >>>> zechce mi się (klientowi http) odezwać ponownie?
> >>>
> >>> Tak. Jak masz do wyświetlenia 15 obrazków z jednej domeny, to nie ma sensu
> >>> tworzyć 15 połączeń. Można zrobić keepalive i pobrać wszystkie w jednym.
> >>
> >> Ja nie pytam o teorię i logiczne rozwiązanie. Pytam o implementacje na
> >> poziomie serwera HTTP, np. apache.
> >> Jeśli byłaby to prawda to serwery typu fejsbuk miałyby otwarte dziesiątki
> >> milionów socketów [...]
> >
> > 10mln podziel na 60tys komputerów i już nie jest tak strasznie.
>
> Tak czy owak jest to niepotrzebne i ...dziwne.
> Istnieje co prawda coś takiego jak websockets, ale to zupełnie inna bajka.
>
> Dlatego dopytuję o szczegóły implementacyjne, a nie o to co wynika z opisu
> polecenia http, bo coś czuję, że jednak nie jest to tak implementowane.
> Oczywiście mogę się mylić! A lubię zaliczać dysonanse poznawcze tego
> rodzaju :-)
Jest w sieci wiele przykładów serwerów i klientów http. Jeśli Ci zależy,
możesz któryś poznać. Wpisz w google np. taką frazę "qt http server"
-
15. Data: 2017-10-12 18:50:21
Temat: Re: Wieloużytkownikowy serwer udp?
Od: "M.M." <m...@g...com>
On Thursday, October 12, 2017 at 6:49:07 PM UTC+2, M.M. wrote:
> On Thursday, October 12, 2017 at 6:40:34 PM UTC+2, Roman Tyczka wrote:
> > On Thu, 12 Oct 2017 08:05:28 -0700 (PDT), M.M. wrote:
> >
> > >>>> Czyli wołając reqesta do serwera http i używając w nagłówku HTTP pola
> > >>>> keep-alive powoduję, że serwer http utrzymuje ze mną aktywne połączenie tcp
> > >>>> czyli de facto otwartego socketa? I sobie to połączenie wisi, aż łaskawie
> > >>>> zechce mi się (klientowi http) odezwać ponownie?
> > >>>
> > >>> Tak. Jak masz do wyświetlenia 15 obrazków z jednej domeny, to nie ma sensu
> > >>> tworzyć 15 połączeń. Można zrobić keepalive i pobrać wszystkie w jednym.
> > >>
> > >> Ja nie pytam o teorię i logiczne rozwiązanie. Pytam o implementacje na
> > >> poziomie serwera HTTP, np. apache.
> > >> Jeśli byłaby to prawda to serwery typu fejsbuk miałyby otwarte dziesiątki
> > >> milionów socketów [...]
> > >
> > > 10mln podziel na 60tys komputerów i już nie jest tak strasznie.
> >
> > Tak czy owak jest to niepotrzebne i ...dziwne.
> > Istnieje co prawda coś takiego jak websockets, ale to zupełnie inna bajka.
> >
> > Dlatego dopytuję o szczegóły implementacyjne, a nie o to co wynika z opisu
> > polecenia http, bo coś czuję, że jednak nie jest to tak implementowane.
> > Oczywiście mogę się mylić! A lubię zaliczać dysonanse poznawcze tego
> > rodzaju :-)
>
> Jest w sieci wiele przykładów serwerów i klientów http. Jeśli Ci zależy,
> możesz któryś poznać. Wpisz w google np. taką frazę "qt http server"
Może tam Cię coś zainteresuje:
http://doc.qt.io/qt-5/qtwebsockets-echoserver-exampl
e.html
Pozdrawiam
-
16. Data: 2017-10-12 19:04:52
Temat: Re: Wieloużytkownikowy serwer udp?
Od: Roman Tyczka <n...@b...no>
On Thu, 12 Oct 2017 09:50:21 -0700 (PDT), M.M. wrote:
>>> Istnieje co prawda coś takiego jak websockets, ale to zupełnie inna bajka.
>>>
>> Jest w sieci wiele przykładów serwerów i klientów http. Jeśli Ci zależy,
>> możesz któryś poznać. Wpisz w google np. taką frazę "qt http server"
>
> Może tam Cię coś zainteresuje:
> http://doc.qt.io/qt-5/qtwebsockets-echoserver-exampl
e.html
>
> Pozdrawiam
Ale przecież napisałem, że nie chodzi o websockety bo to inna bajka, osobna
(nowa) technologia i do czego innego służąca.
A jeśli chodzi o źródła serwerów... jedynie serwery pokroju Apache czy IIS
są tu istotne, bo to one trzymają na swoich plecach internet, a żeby zbadać
źródła takiego Apache to ...jestem za chudy w uszach. Stąd dopytuję, może
ktoś w tym siedzi zawodowo i po prostu wie.
--
pozdrawiam
Roman Tyczka
-
17. Data: 2017-10-12 20:06:34
Temat: Re: Wieloużytkownikowy serwer udp?
Od: Piotr Chamera <p...@p...onet.pl>
W dniu 2017-10-12 o 19:04, Roman Tyczka pisze:
> On Thu, 12 Oct 2017 09:50:21 -0700 (PDT), M.M. wrote:
>
>>>> Istnieje co prawda coś takiego jak websockets, ale to zupełnie
>>>> inna bajka.
>>>>
>>> Jest w sieci wiele przykładów serwerów i klientów http. Jeśli Ci
>>> zależy, możesz któryś poznać. Wpisz w google np. taką frazę "qt
>>> http server"
>>
>> Może tam Cię coś zainteresuje:
>> http://doc.qt.io/qt-5/qtwebsockets-echoserver-exampl
e.html
>>
>> Pozdrawiam
>
> Ale przecież napisałem, że nie chodzi o websockety bo to inna bajka,
> osobna (nowa) technologia i do czego innego służąca. A jeśli chodzi
> o źródła serwerów... jedynie serwery pokroju Apache czy IIS są tu
> istotne, bo to one trzymają na swoich plecach internet, a żeby zbadać
> źródła takiego Apache to ...jestem za chudy w uszach. Stąd dopytuję,
> może ktoś w tym siedzi zawodowo i po prostu wie.
Z ciekawości zerknąłem do Wikipedii
(https://en.wikipedia.org/wiki/HTTP_persistent_conne
ction), piszą, że
dla HTTP 1.1 jest to (keepalive) zachowanie domyślne. Apache ma
domyślnie ustawiony dość krótki czas utrzymywania połączenia (15 i 5
sekund w zal. od wersji).
,,HTTP 1.1
In HTTP 1.1, all connections are considered persistent unless declared
otherwise.[1] The HTTP persistent connections do not use separate
keepalive messages, they just allow multiple requests to use a single
connection. However, the default connection timeout of Apache httpd 1.3
and 2.0 is as little as 15 seconds[2][3] and just 5 seconds for Apache
httpd 2.2 and above.[4][5] The advantage of a short timeout is the
ability to deliver multiple components of a web page quickly while not
consuming resources to run multiple server processes or threads for too
long.[6]"
Bardzo popularny Nginx (popularniejszy na mocno obciążonych witrynach od
Apache, https://w3techs.com/technologies/cross/web_server/ra
nking) ma
ten czas domyślnie ustawiony na 75 sekund, czyli już dość długo). Można
to ustawić w konfiguracji w zależności od potrzeb za pomocą dwu opcji:
Syntax: keepalive_requests number;
Default: keepalive_requests 100;
Context: http, server, location
This directive appeared in version 0.8.0.
Sets the maximum number of requests that can be served through one
keep-alive connection. After the maximum number of requests are made,
the connection is closed.
Syntax: keepalive_timeout timeout [header_timeout];
Default: keepalive_timeout 75s;
Context: http, server, location
The first parameter sets a timeout during which a keep-alive client
connection will stay open on the server side. The zero value disables
keep-alive client connections. The optional second parameter sets a
value in the "Keep-Alive: timeout=time" response header field. Two
parameters may differ.
The "Keep-Alive: timeout=time" header field is recognized by Mozilla and
Konqueror. MSIE closes keep-alive connections by itself in about 60 seconds.
Dokumentacja i źródła tego serwera są dostępne na http://nginx.org/
-
18. Data: 2017-10-12 23:09:10
Temat: Re: Wieloużytkownikowy serwer udp?
Od: "M.M." <m...@g...com>
On Thursday, October 12, 2017 at 7:04:54 PM UTC+2, Roman Tyczka wrote:
> On Thu, 12 Oct 2017 09:50:21 -0700 (PDT), M.M. wrote:
>
> >>> Istnieje co prawda coś takiego jak websockets, ale to zupełnie inna bajka.
> >>>
> >> Jest w sieci wiele przykładów serwerów i klientów http. Jeśli Ci zależy,
> >> możesz któryś poznać. Wpisz w google np. taką frazę "qt http server"
> >
> > Może tam Cię coś zainteresuje:
> > http://doc.qt.io/qt-5/qtwebsockets-echoserver-exampl
e.html
> >
> > Pozdrawiam
>
> Ale przecież napisałem, że nie chodzi o websockety bo to inna bajka, osobna
> (nowa) technologia i do czego innego służąca.
> A jeśli chodzi o źródła serwerów... jedynie serwery pokroju Apache czy IIS
> są tu istotne, bo to one trzymają na swoich plecach internet, a żeby zbadać
> źródła takiego Apache to ...jestem za chudy w uszach. Stąd dopytuję, może
> ktoś w tym siedzi zawodowo i po prostu wie.
>
> --
> pozdrawiam
> Roman Tyczka
I tak nie wiem czego nie wiesz. Robi się close(socket) jeśli
upłynął zadany czas, albo po każdej odpowiedzi. Zaimplementować to
można na kilkadziesiąt sposobów i każdy będzie dobry. Jeśli
nie odpowiesz mi dlaczego chcesz to wiedzieć i do czego potrzebujesz, to
mogę jedynie ponownie odesłać do źródeł. Możesz napisać swój
edukacyjny serwer http i będziesz miał jakąś implementację bez
czytania źródeł apache i iis. Naprawdę nie trzeba być mistrzem
świata w programowaniu, aby w kilka godzin napisać swój serwer z
konfiguracją keep-alive.
Natomiast teoretycznie można by zoptymalizować czasy, ale nie
słyszałem aby w praktyce to się stosowało. Obojętnie jak
to w danej implementacji ktoś zoptymalizuje, to po prostu
robi się close(socekt) gdy zaszły warunki danej strategii.
Wracając, w przypadku http, klienta każdy może napisać, więc nie
można liczyć na rozsądne zachowanie ze strony klienta. Wszelkie
strategie muszą być po stronie serwera. Otwieranie za każdym razem
połączenia kosztuje. Przetrzymywanie otwartych połączeń też kosztuje.
Serwer w przybliżeniu wie jaki jest średni rozkład prawdopodobieństwa
zapytań od jednego klienta, a nawet wie, jakie jest rozkład po
konkretnym zapytaniu. Jeśli znamy rozkłady, znamy koszt
otwierania połączenia, znamy koszt przechowywania połączenia, to
można zbudować hash-table zapewniającą sub-optymalne zachowanie:
while( is_work )
request = get_request
if new_connection then
keep_alive = init_value
else
keep_alive += hash_table[ request ]
end if
response = compute( request )
send( response )
if current_time - time_open > keep_alive
close(socket)
end if
build_strategy( hash_table , request )
end while
Pozdrawiam
-
19. Data: 2017-10-14 10:02:13
Temat: Re: Wieloużytkownikowy serwer udp?
Od: "AK" <n...@n...net>
Użytkownik "Roman Tyczka" <n...@b...no> napisał:
> Ale przecież napisałem, że nie chodzi o websockety bo to inna bajka, osobna
> (nowa) technologia i do czego innego służąca.
No przeciez Ci napisali w kontekscie HTTP: keep-alive
AK
-
20. Data: 2017-10-17 15:46:06
Temat: Re: Wieloużytkownikowy serwer udp?
Od: m...@k...org
Jak chcesz wiedziec, jak to robi Fb to:
https://github.com/facebook/proxygen
--
Michal