🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #217017

Re: Embedded HTTP Server

#217017
From: Maciej Sobczak
Date: Sat, 06 Jun 2020 19:00
46 lines
4045 bytes
> Po pierwsze, to aż się prosi, żeby ten serwer był zwykłą klasą. Czemu ktoś nie miałby sobie stworzyć 5 serwisów WWW działających na różnych portach?

No właśnie. I tu poruszamy ważną kwestię. Bo piszesz, że aż się prosi, ale potem okazuje się, że nikt nie prosi, tylko czemu ktoś by miał nie prosić.

A mi chodziło o to, żeby pakiet 1.0 przekroczył próg używalności a nie o to, żeby rozwiązać problemy typu "czemy ktoś nie miałby".

Natomiast, nic nie stoi na przeszkodzie, żeby sobie zawołać funkcję server_start() 5 razy z różnymi portami, z 5 różnych wątków, bo ta funkcja i tak nie ma stanu globalnego. Nie trzeba mieć do tego klasy.

> Po drugie, nie ma sposobu na zamknięcie serwera, poza zabiciem procesu. Chyba, że ja czegoś nie widzę.

Tak. Funkcja server_stop() już istniała, ale ją usunąłem. To nie jest oczywiste, jak zamknąć serwer, który ma callbacki, niektóre zapewne w trakcie pracy.
Wszystkie problemy da się rozwiązać, ale nie o to chodziło w wersji 1.0.

> Mówiąc o API: 6 wariantów register_{generic,html,text}_{post,get}_action można by sprowadzić do 2. register_action(const char* name, {post_action_type, get_action_type} callback, const char* mime_type).

Nie, bo po pierwsze generic i html różnią się obsługą a po drugie nie chciałem przeciążać funkcji register, bo bardziej naturalne wydaje mi się przeciążenie funkcji akcji dla get i post:

void my_action(to-co-trzeba-dla-get) { ... }
void my_action(to-co-trzeba-dla-post) { ... }

I wtedy nie dałoby rady:

register(my_action);

> Zresztą, może lepiej byłoby przyjmować jako argument mapę akcji - czyli to co masz teraz w get_actions/post_actions. Niech user sobie przygotuje takie mapy w sposób, jaki mu pasuje, a ty pozbędziesz się potrzeby blokowania tych struktur.

Ale teraz obsługa jest prostsza, właśnie dlatego, że user nie musi robić takich map.
Można by było pomyśleć o akcji catch-all. Tam user dostawałby wszystko (co nie było obsłużone) i mógłby sobie tam zrobić takie mapy, jakie zechce.

> Czasem funkcje przyjmują const char*, czase std::string& co jest niespójne.

Bo chodziło o przewidywane użycie. Tam gdzie przewidywałem literał, jest const char*.

> W ogóle nie walidujesz, czy wskaźniki są niepuste. Tak samo z std::function.

A po co? Bez przesady z tą walidacją. Walidować należy input z zewnątrz (i nawet opisałem to w przykładzie 3, z parametrami) a nie własne literały.

> Zero testów. Serio? :)

Są testy. W katalogu, który dla zmylenia przeciwnika nazywa się examples. :-)

A jakieś inne testy byś chciał?

-- 
Maciej Sobczak * http://www.inspirel.com
Technical Details
Message-ID: <7cd03711-5fee-4322-b02a-c803fcf43b31o@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <d423a072-9378-441b-ba06-e0657a1fa53bo@googlegroups.com> <3e267b62-0fdf-41c2-9f9c-c316f98b85c6o@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:4c8d:: with SMTP id j13mr16719195qtv.38.1591470005880;        Sat, 06 Jun 2020 12:00:05 -0700 (PDT)
X-Received: by 2002:ac8:2b98:: with SMTP id m24mr16348788qtm.7.1591470005682; Sat, 06 Jun 2020 12:00:05 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sat, 6 Jun 2020 12:00:05 -0700 (PDT)
In-Reply-To: <3e267b62-0fdf-41c2-9f9c-c316f98b85c6o@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=213.108.152.51; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S
NNTP-Posting-Host: 213.108.152.51
References: <d423a072-9378-441b-ba06-e0657a1fa53bo@googlegroups.com> <3e267b62-0fdf-41c2-9f9c-c316f98b85c6o@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <7cd03711-5fee-4322-b02a-c803fcf43b31o@googlegroups.com>
Subject: Re: Embedded HTTP Server
From: Maciej Sobczak <see.my.homepage@gmail.com>
Injection-Date: Sat, 06 Jun 2020 19:00:05 +0000
Lines: 77
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit