Chciałbym zająć się tworzeniem stron internetowych przy użyciu C ++ jako „języka skryptowego” po stronie serwera. Moja infrastruktura serwerowa jest oparta na * nix, więc tworzenie aplikacji internetowych w C ++ na platformie Azure nie ma zastosowania, a C ++ / CLI ASP.NET również nie ma zastosowania.
Niezależnie od starszych aplikacji CGI, czy tworzenie stron internetowych może odbywać się za pomocą C ++?
web-development
c++
Scott Davies
źródło
źródło
,
są.
są przekierowywane do gniazdka.Odpowiedzi:
Absolutnie.
Istnieje nawet kilka ram do ich opracowania, w tym Wt , cppcms , CSP i inne. Główna implementacja FastCGI jest w C i obsługuje bezpośrednio kilka języków , w tym C ++.
Dowolny język programowania, który może analizować ciągi znaków, może być używany w CGI lub serwletu. Dowolny język, który może implementować powiązania z bibliotekami C, może być również użyty do opracowania modułów dla serwerów kompatybilnych z ISAPI lub Apache.
W C ++ nie jest to szczególnie łatwe, a dobre silniki szablonów są nieliczne, ale można to zrobić.
Oczywiście pytanie, czy jest to dobry pomysł, jest zupełnie inną sprawą. :)
Uwaga: główne strony internetowe, takie jak Amazon.com, eBay i Google, używają C ++ do części swojej infrastruktury. Pamiętaj jednak, że Google używa C ++ tylko w systemach o kluczowym znaczeniu dla szybkości, a Amazon.com stosunkowo niedawno zrezygnował z Lisp (co rozgniewało niektórych z ich starszych pracowników :).
Facebook wcześniej skompilował PHP do C ++, ale ich kompilator HipHop (napisany częściowo w C ++) został odtąd zmodyfikowany jako maszyna wirtualna z kodem bajtowym.
źródło
Dlaczego nie?
OkCupid serwis randkowy jest tworzony z C ++. Są prawdopodobnie inne przykłady.
Istnieje również inspirowany Qt zestaw narzędzi do tworzenia aplikacji internetowych w C ++ o nazwie Wt .
źródło
Jeśli planujesz napisać swoją aplikację internetową w C ++, całkowitym marnotrawstwem byłoby zinterpretowanie jej jako CGI.
Moją sugestią byłoby zbudowanie go asynchronicznie przy użyciu ASIO (asynchroniczne operacje we / wy). Dzięki temu możesz zbudować niesamowitą szybką usługę internetową (w połączeniu z nginx jako serwerem odwrotnego proxy i statycznym dla uzyskania najlepszych efektów); Połącz to z biblioteką szablonów, taką jak Wt, i możesz obsłużyć dziesiątki tysięcy żądań na sekundę z jednego serwera.
To, czy jest to praktyczna alternatywa dla frameworku dynamicznego języka, to inna kwestia.
źródło
Krótka odpowiedź brzmi: WSZYSTKO może zostać użyte do napisania strony internetowej, pod warunkiem, że może ona czytać dane wejściowe, zapisywać dane wyjściowe i jest wykonywalna przez serwer WWW.
Technicznie każdy język może być używany jako skrypt CGI, pod warunkiem, że:
Istnieją również inne sposoby. Perl ma możliwość budowania jako otoki wokół kodu c / c ++, działającego jako warstwa interpretacyjna między nimi (i nie obejmuje to modułów Perla, które są skompilowane płasko jako C).
źródło
na początku było dość powszechne - pierwszymi stronami, nad którymi pracowałem pod koniec lat 90. były rozszerzenia ISAPI napisane w C ++ i działały całkiem dobrze.
źródło
Wygląda na to, że Microsoft tak myśli. Sprawdź Casablankę, która jest nowym zestawem narzędzi dla (wydaje się) platformy Azure przy użyciu C ++.
źródło
W przypadku PHP możesz pisać własne rozszerzenia C / C ++ i w ten sposób uzyskać dobre korzyści wydajnościowe. Gdybym miał część aplikacji WWW wymagającą dużej mocy obliczeniowej, prawdopodobnie stworzyłbym małą bibliotekę C ++, która odciążyłaby to przetwarzanie do rozszerzenia, a następnie zwróciłaby wynik z powrotem do PHP, a następnie PHP wyśle go do przeglądarki.
Inną rzeczą, której ludzie często nie rozważają, jest odciążenie niektórych procesorów po stronie klienta, np. JavaScript / jQuery. Jeśli mam serwer sieciowy, mogę potrzebować procesora 3Ghz, aby wykonać intensywne przetwarzanie procesora dla określonej funkcji (być może przetwarzania danych). Moja firma co miesiąc płaci pieniądze za ten serwer, aby mógł nadal działać. Jeśli chcę skalować operacje dla 100 równoczesnych użytkowników wykonujących to zadanie intensywnie wykorzystujące procesor w tym samym czasie, być może potrzebuję wielu procesorów i serwerów, co zwiększy koszty mojej firmy. Jeśli odciążę to zadanie intensywnie wykorzystujące procesor po stronie klienta, każdy użytkownik odwiedzający witrynę może wykonać własne przetwarzanie danych i nie muszę zwiększać wydajności serwera, oszczędzając w ten sposób pieniądze.
W końcu z kolektywną mocą ponad 100 komputerów stacjonarnych / tabletów / telefonów komórkowych, które przetwarzają dla Ciebie, to o wiele więcej mocy niż twój serwer siedzący w centrum danych gdzieś kosztujący co miesiąc pieniądze biznesowe, aby móc dalej działać. Potencjalnie wtedy wszystko, co zrobiłby Twój serwer, polegałoby na pobieraniu danych z bazy danych, udostępnianiu treści oraz odrobinie wstępnego / końcowego przetwarzania i sprawdzania poprawności danych przed ich ponownym zapisaniem w bazie danych. Oczywiście nie spowodowałbyś zbyt dużego obciążenia procesora po stronie klienta, co mogłoby zablokować / zawiesić interfejs użytkownika przeglądarki internetowej, możesz odpalić żądanie AJAX na serwerze, pobrać dane, a następnie przetwarzać dane asynchronicznie po stronie klienta, opuszczając sieć -Ibrowser UI całkowicie użyteczny.
źródło
Tak, można go użyć. Inni wspominali o różnych podejściach. Oto moje własne podejście. Zaletą jest to, że jest całkowicie przenośny i niezależny, wszystkie wybrane biblioteki zależą tylko od ANSI C. Konfiguracja wymaga tylko jądra Linux i kompilatora C (i oczywistych rzeczy, takich jak Busybox, bash itp.) (Lub Windows i kompilator), nie są potrzebne żadne dodatkowe biblioteki, żadne wymyślne ogromne instalacje.
Rezultatem jest pojedynczy program, który jest zarówno serwerem sieciowym, jak i dynamicznym generatorem stron (zastępuje zarówno „apache”, jak i „php”), a także będzie miał dostęp do bazy danych przez sqlite.
Wykorzystane biblioteki:
createElement
Pozostała część tej odpowiedzi to kompletny przewodnik po konfiguracji dla systemu Linux. Zarówno SQlite, jak i MiniXML są opcjonalne, ale przewodnik obejmuje pełną instalację. Od Ciebie zależy, czy skomentujesz niepotrzebne części, jeśli chcesz wyłączyć sqlite lub MiniXML.
1. Pobierz 3 biblioteki
2. Przygotuj swój folder
sqlite3.c , sqlite3.h
mongoose.c , mongoose.h
mxml.h
3. Skompiluj mxml
Być może zauważyłeś brak pliku mxml.c, ponieważ musimy utworzyć statyczną bibliotekę mxml. Przejdź do folderu, w którym pobrany został plik mxml tar.gz, i wykonaj:
Po zakończeniu kompilacji zostanie wygenerowanych wiele plików, jedynym interesującym nas
libmxml.a
plikiem jest skopiowanie go do folderu głównego.3.1 Kontrola podwójna
Sprawdź, czy główny folder ma następujące elementy:
mongoose.c, mongoose.h
libmxml.a, mxml.h
sqlite.c, sqlite.h
4. main.c
Stwórzmy rzeczywisty program, utwórz
main.c
plik w głównym folderze, oto szkielet, aby zacząć.Wreszcie kompilacja!
Kompilujmy się.
cd
do głównego folderu i wykonaj następujące czynności:Teraz uruchom server.out za pomocą
/server.out
i przejdź dolocalhost:8080/hello
Gotowy :)
źródło
Wydaje mi się, że kilka systemów wbudowanych (np. Routery, drukarki, ...) ma jakiś serwer WWW oparty na C ++.
W szczególności możesz użyć biblioteki serwera HTTP, takiej jak libonion, aby dodać pewne możliwości sieciowe do jakiegoś programu w C lub C ++ lub stworzyć lekki serwer z pewnym interfejsem internetowym.
Niektóre osoby kodują swój serwer WWW lub interfejs HTTP w Ocaml za pomocą Ocsigen . Nie każda strona internetowa to PHP. A dzięki FastCGI możesz dynamicznie przetwarzać strony w / do swojej aplikacji.
źródło