🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.python
3 messages
3 total messages Started by Daniel Mróz Wed, 13 May 2009 14:29
Re: Serwer nasłuchująco-wysyłający
#25955
Author: Daniel Mróz
Date: Wed, 13 May 2009 14:29
25 lines
1898 bytes
On 07.04.2009, Rob Wolfe <rw@smsnet.pl> wrote:
> Jeśli potrzebujesz stałego połączenia między klientem i serwerem,
> to `SocketServer` jest generalnie złym wyborem.
> `SocketServer` został pomyślany jako mechanizm obsługi _bezstanowych_ 
> protokołów (np. http), czyli działa tak:
> 1. otwórz połączenie z klientem
> 2. odczytaj i przetwórz żądanie
> 3. wygeneruj i wyślij odpowiedź
> 4. zamknij połączenie
Oj, chyba Ci się pomylił SocketServer z BaseHTTPServer.
SocketServer.*Server będzie trzymał połączenie dotąd, aż
SocketServer.*RequestHandler.handle() żyje. Nie ma najmniejszych
problemów z implementacją protokołów stanowych. Wystarczy w handle()
wrzucić pętlę. Chyba, że o czymś nie wiem i te wszystkie serwery
jakie napisałem do tej pory z wykorzystaniem SocketServer nie działają ;)


Pozdrawiam
Beorn

-- 
Daniel 'Beorn' Mróz <beorn@alpha.pl>    http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V!  PS+ PE++ Y+ PGP++ t- 5  X R !tv b+ DI D++ G++ e h*]
[                          r++  y+                           ]
Re: Serwer nasłuchująco-wysyłający
#25957
Author: Daniel Mróz
Date: Wed, 13 May 2009 16:22
23 lines
1931 bytes
On 13.05.2009, Rob Wolfe <rw@smsnet.pl> wrote:
> Zaprzęganie całej tej maszynerii z handlerami tylko po to, żeby mieć 
> jedną pętlę to jest dla mnie gruba przesada. 
> Nie prościej użyć po prostu czystych gniazd?
Eeeee... SocketServer odwala kawał roboty za programistę. Jedyne, co
trzeba zrobić to dostarczyć jedną klasę z metodą handle() i ewentualnie
wedle potrzeb sobie ponadpisywać inne (np. verify()). Łatwo też zrobić
np. obsługę na wątkach bez klepania całej maszynerii. Nie widzę nic
złego w użyciu SocketServer dla protokołów stanowych. Wręcz przeciwnie,
jest to ogromne ułatwienie.
BaseHTTPServer jest bezstanowy nie dlatego, że subklasi SocketServer,
lecz dlatego, że sam protokół HTTP jest bezstanowy. Super nie ma tu
większego znaczenia.


Pozdrawiam
Beorn

-- 
Daniel 'Beorn' Mróz <beorn@alpha.pl>    http://127.0.0.1/beorn
[GIT d s:- a-@ C++++ UL++++$ P+ L++++ E--- W+ N+++ o? K- w---]
[O- M- V!  PS+ PE++ Y+ PGP++ t- 5  X R !tv b+ DI D++ G++ e h*]
[                          r++  y+                           ]
Re: Serwer nasłuchująco-wysyłający
#25956
Author: Rob Wolfe
Date: Wed, 13 May 2009 17:54
42 lines
2526 bytes
Daniel Mróz <beorn@alpha.pl> writes:

> On 07.04.2009, Rob Wolfe <rw@smsnet.pl> wrote:
>> Jeśli potrzebujesz stałego połączenia między klientem i serwerem,
>> to `SocketServer` jest generalnie złym wyborem.
>> `SocketServer` został pomyślany jako mechanizm obsługi _bezstanowych_ 
>> protokołów (np. http), czyli działa tak:
>> 1. otwórz połączenie z klientem
>> 2. odczytaj i przetwórz żądanie
>> 3. wygeneruj i wyślij odpowiedź
>> 4. zamknij połączenie
> Oj, chyba Ci się pomylił SocketServer z BaseHTTPServer.

`BaseHTTPServer.HTTPServer` nie bez powodu dziedziczy 
po `SocketServer.TCPServer`, nadpisuje tylko `server_bind`
i używa całej pozostałej maszynerii. `SocketServer` tak został napisany,
że do tego się świetnie nadaje.

> SocketServer.*Server będzie trzymał połączenie dotąd, aż
> SocketServer.*RequestHandler.handle() żyje. Nie ma najmniejszych
> problemów z implementacją protokołów stanowych. Wystarczy w handle()
> wrzucić pętlę. Chyba, że o czymś nie wiem i te wszystkie serwery
> jakie napisałem do tej pory z wykorzystaniem SocketServer nie działają ;)

Przecież nie napisałem, że się nie da. Uważam tylko, że to rozwiązanie
jest kiepskie. `RequestHandler` imho powinien obsługiwać _żądanie_,
a nie odpowiadać za całą komunikację. 

"""
class BaseRequestHandler:

    """Base class for request handler classes.

    This class is instantiated for each request to be handled.
    [...]
"""

Zaprzęganie całej tej maszynerii z handlerami tylko po to, żeby mieć 
jedną pętlę to jest dla mnie gruba przesada. 
Nie prościej użyć po prostu czystych gniazd?

RW
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads