Czy są jakieś koncepcyjne wady tworzenia aplikacji WWW w C ++ i MySQL?

10

Odziedziczyłem całkiem interesujący projekt, w którym istnieje dobra okazja, aby wziąć istniejące oprogramowanie i przekształcić je w aplikację internetową SaaS. Ponieważ projekt jest dziedziczony, podstawa / framework kodu jest już zdefiniowany jako C ++ i MySQL. Sama aplikacja jest kompilowana i działa jako plik EXE w systemie Windows Server. Interfejs użytkownika jest oparty na sieci, a aplikacja działa jako rodzaj serwera. Z tego, co wiem o nowoczesnych aplikacjach internetowych, jest to być może niezwykły wybór. Obecnie wydaje się, że większość ludzi wybiera framework PHP lub Ruby on Rails. Z pewnością takie wrażenie wywarło na mnie czytanie blogów na ten temat. Jestem więc bardzo zainteresowany, aby dowiedzieć się, czy plik C ++ EXE wspierany przez MySQL jest solidnym fundamentem dla aplikacji internetowej, czy też powinniśmy szukać kompilacji w inny sposób?

jnthnclrk
źródło
To, co opisujesz, brzmi bardziej jak proces serwera , a nie aplikacja internetowa. A dla procesów serwerowych PHP lub RoR to z pewnością niezwykłe wybory. Jakiego rodzaju problem faktycznie masz?
Benjamin Bannier
Czy exe może używa nowego Hostable Web Core ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ), czy faktycznie implementuje swój własny serwer HTTP od zera? Jeśli to pierwsze, to być może naprawdę starali się stworzyć bardzo szybką aplikację, używając C ++ i hostując ją w celu przeniesienia na komputery klienckie.
Jimmy Hoffa
Oczywiście, każdy rozsądny człowiek użyłby czegoś takiego jak POCO Net :: HTTPServer zamiast pisać serwer HTTP od zera. Ale to nie jest tak, jak RoR lub np. Frameworki Python nie pakują niektórych serwerów WWW.
Benjamin Bannier
4
C ++ nie jest niczym niezwykłym jako backend aplikacji internetowej. Wyszukiwarka Google jest napisana w c ++. Wiele aplikacji yahoo to c ++. Prawie każda aplikacja internetowa AAA używana przez miliony ludzi jest napisana w c ++.
Lord Tydus,
Tak, aplikacja została zaprojektowana jako niestandardowy serwer WWW. Strona aplikacji pochodzi z interfejsu administratora HTML i zestawu funkcji.
jnthnclrk

Odpowiedzi:

20

Jest OK, aby złożyć aplikację internetową przy użyciu C ++ IF korzyści przewyższają koszty, oczywiście. Google, Amazon, Facebook są zbudowane w C ++ pod kątem wydajności, szybkości i pamięci - czyli kosztów serwerów.

Jednak, jak się domyślacie, użycie C ++ ma w tym zakresie wady. Zależy to jednak od twoich narzędzi.

Najpierw pozwól mi zacytować stronę cppcms na ten temat:

Kiedy należy użyć CppCMS.

Język C ++ jest daleki od popularności w rozwoju sieci z wielu powodów: braku odpowiednich narzędzi, umiejętności programistów i wielu innych.

Są jednak obszary, w których programowanie sieciowe C ++ za pomocą CppCMS staje się bardzo przydatne i wydajne, a niektóre są stratą czasu.

Kiedy należy używać CppCMS?

1.Wysoce obciążające strony internetowe i aplikacje z setkami tysięcy odwiedzin na sekundę, gdzie wymagana jest wysoka wydajność, wydajność i skalowalność.

2. Aplikacje wymagające skalowalnych technologii Comet / Server Push --- CppCMS może skutecznie obsługiwać setki i tysiące jednoczesnych połączeń HTTP przy minimalnym zużyciu zasobów.

3. Osadzanie interfejsu internetowego w istniejących aplikacjach / usługach C ++ przy niewielkim koszcie dodatkowej biblioteki.

4.Wbudowane słabo zasilane urządzenia - CppCMS umożliwia tworzenie bogatych aplikacji o stosunkowo niskim koszcie sprzętu, który działałby stosunkowo szybko.

Kiedy nie używać?

Jeśli tworzysz małe aplikacje internetowe, które nie wymagają dużych obciążeń i wymagają bardzo krótkiego czasu wprowadzania produktów na rynek - prawdopodobnie narzędzia takie jak Django lub RoR byłyby bardziej odpowiednie do takich zadań.

Wady specyficzne dla C ++ to:

  • Czasy kompilacji mogą być bardzo, bardzo, bardzo wolne w porównaniu do innych języków. Może to wpływać na iteracje, odstępy między wydaniami, ale także na moralność programisty. Upewnij się, że warto.
  • W większości przypadków musisz skompilować zmiany. Można tego uniknąć, ale jest to normalne.
  • Pisanie nowoczesnego C ++ ułatwia (uczenie się, czytanie, pisanie, debugowanie itp.), Ale wielu programistów C ++ nie wie, co to jest Modern C ++. Więc jeśli pracujesz w zespole, musisz mieć dobrą znajomość Modern C ++ od całego zespołu. Jeśli nie, łatwo popełnisz bardzo skomplikowane błędy. To powiedziawszy, to bardziej problem z ludźmi niż z językiem. Po prostu historia C ++ nie pomogła w łatwym zrozumieniu. Dobre nauczanie nie jest tak powszechne jak w bardziej współczesnych (historycznie) językach.
  • Unicode jest nadal słabo obsługiwany przez podstawowy język C ++, co czyni go potencjalnym źródłem wielkiego bólu. Po prostu używaj UTF-8 wszędzie i niektórych bibliotek (sprawdź boost), aby nim zarządzać.
  • Standard C ++ nie wie, co to jest biblioteka. Dlatego używamy konwencjonalnych sposobów zarządzania nimi w różnych kompilatorach / linkerach / systemach operacyjnych. Może to stanowić problem, jeśli zaczniesz wchodzić w wieloplatformowy kod, który musi ładować / zwalniać „w locie” niektóre moduły.

Może rzucisz okiem na CPPCMS? A może wt, jeśli chcesz stworzyć stronę w stylu GUI?

Sprawdź także następujące pytania:

Klaim
źródło
3
Rozumiem, że Facebook jest programowany w PHP, ale zbudowali również własny kompilator dla PHP w C ++ dla Linux. Głównym powodem, dla którego Facebook opracował kompilator, było obniżenie kosztów elektrycznych związanych z obsługą serwerów. To nie była tak naprawdę szybkość (jest szybsza), ale fakt, że wymaga mniejszego użycia procesora na żądanie. Jest to projekt typu open source, który można znaleźć tutaj. developers.facebook.com/blog/post/2010/02/02/…
Reactgular
1
Tak, powody są różne, dlatego wspomniałem o kosztach energii i serwerów. Biorąc to pod uwagę, Alexandrescu powiedział niedawno w wywiadzie, uważam, że coraz więcej kodu na Facebooku jest napisanych bezpośrednio w C ++, ale nie wspomniał dlaczego, jeśli moja pamięć jest poprawna. Zapewniają również bibliotekę open source pełną narzędzi / algorytmów C ++: Folly facebook.com/notes/facebook-engineering/…
Klaim
Zauważ też, że nawet jeśli kod najpierw zostanie napisany w PHP, a następnie przekonwertowany na C ++, 3 wskazane przeze mnie wady są nadal prawdziwe.
Klaim
2
Kolejny framework internetowy C ++: wt (dowcipny). Jest przeznaczony dla osób, które chcą budować aplikacje internetowe pod maską. Do przenoszenia jest to dobry wybór.
K.Steff,
Myślę, że wszystkie te witryny mają komponenty napisane w wielu językach. C ++ jest najprawdopodobniej wykorzystywany jako optymalizacja sekcji kodu wymagających precyzyjnego zarządzania pamięcią.
jiggy
3

Wordpress działający w PHP z kilkoma zainstalowanymi wtyczkami sprowadza mój serwer Winders na kolana. Więc nie mam żadnych problemów z pomysłem implementacji aplikacji internetowej w C ++. Szybkość jest kluczowym elementem korzystania z Internetu.

Namioty graficzne do obsługi większości projektów internetowych. PHP jest niejasnym językiem skryptowym, który działa wewnątrz HTML. Umożliwianie autorom PHP ucieczki i wyjścia z HTML. W rezultacie praca z HTML ma wiele zalet.

Mimo to możesz zaimplementować dowolną liczbę rozwiązań szablonów HTML w C ++.

Można podać długą listę frameworków Python i PHP, które pozwalają na szybki rozwój, ale jeśli masz dużo czasu, C ++ jest zdecydowanie możliwe.

Nie rozumiem twojej decyzji o zrobieniu C ++ w systemie Windows. lol

Reactgular
źródło
1
Klasyczny argument słomianego człowieka, istnieje wiele lepszych szybkich alternatyw dla wordpress / php, które nie są C ++. Nie twierdzę, że C ++ nie jest właściwym wyborem, tylko twój argument nie jest tak naprawdę dobrze sformułowany.
Jimmy Hoffa,
Zgadzam się z Tobą. Nie sądzę, że próbowałem uczynić wordpress alternatywą. Po prostu ostatnio moje doświadczenie pokazało, że trudno jest uzyskać dobrą wydajność z popularnych frameworków.
Reactgular,
1
StackExchange działa na platformie ASP.NET MVC. Node.Js ma niską wagę i wysoką wydajność, a jeśli naprawdę chcesz czegoś śmiesznie wydajnego, istnieją frameworki Snap lub Yesod Haskell yesodweb.com/blog/2011/03/… , Haskell, JavaScript i C #, wszystkie są wysokopoziomowymi językami zbierania śmieci.
Jimmy Hoffa,
1
Pamiętaj, że szybkość wykonywania kodu na serwerze w wielu przypadkach nie jest czynnikiem ograniczającym w aplikacji internetowej. Duża część czasu spędzana jest na oczekiwaniu na coś (baza danych) lub nawet na interfejsie użytkownika (pobieranie CSS, obrazy, robienie JavaScript, renderowanie HTML)
John
1

To z pewnością niezwykły wybór. C ++ nie został zaprojektowany z myślą o aplikacjach internetowych i chociaż istnieją biblioteki do pisania, powiedzmy, aplikacji FastCGI w C ++, musisz wykonać znacznie więcej pracy, aby uruchomić podstawową aplikację. „Języki internetowe” zwykle robią dla ciebie wiele rzeczy, które musisz uzyskać z dowolnego miejsca w C ++, takich jak implementacja protokołu HTTP, generowanie HTML itp.

Ponadto aplikacje internetowe dotyczą głównie łańcuchów, co nie jest najsilniejszą stroną C ++ - w samym języku nie ma wbudowanego typu łańcucha, co prowadzi do kilku dziwactw i sprawia, że ​​przetwarzanie łańcuchów jest bardziej niezgrabne niż w przypadku wysokiej języki poziomu. Prawidłowa obsługa kodowania znaków w C ++ na granicy czarnej magii. A C ++ może bardzo mocno upaść na dość niewinnie wyglądającym kodzie, co jest znacznie mniej prawdopodobne w przypadku języka wyższego poziomu (one również mogą ulec awarii, ale w większości przypadków serwer sieciowy może odzyskać płynność, szczególnie na platformach, które używają -request model cyklu życia, taki jak PHP).

To powiedziawszy, jeśli masz już napisaną większość bazy kodu, C ++ może nadal być dobrym wyborem. Będziesz musiał znaleźć biblioteki do obsługi wszelkiego rodzaju stron internetowych (przede wszystkim chcesz zintegrować samodzielny serwer HTTP z programem lub podłączyć się do, powiedzmy, Apache, poprzez FastCGI lub poprzez kompilację do moduł; będziesz także potrzebować biblioteki szablonów, która sprawi, że renderowanie dokumentów HTML będzie bezbolesne).

Wreszcie istnieje problem rynku deweloperskiego. Dostępnych jest wielu programistów C ++, a nawet więcej programistów internetowych, ale nakładanie się prawdopodobnie nie jest tak duże, więc jeśli kiedykolwiek będziesz musiał zatrudnić ludzi do pracy nad tym, będziesz miał nieco trudniejszy czas niż, powiedzmy, PHP.

tdammers
źródło
1

Jak powiedzieli inni, koncepcyjnie, C ++ jest doskonałym środowiskiem do rozwoju serwera WWW. Podejmując tę ​​decyzję, należy jednak wziąć pod uwagę kilka czynników.

Popularność języków skryptowych do projektowania serwerów WWW zmienia się z czasem. Proste zmiany mogą być łatwo wprowadzone dzięki niemal natychmiastowej prezentacji wyników. Przekonasz się, że każdy dobry projekt serwera WWW będzie oferował podobne możliwości. Rzeczywiście, C ++ jest doskonałym środowiskiem do osiągnięcia tego celu.

Kluczem do zbudowania dobrego systemu aplikacji serwera WWW jest oddzielenie interfejsu użytkownika od kodu. Celem budowy środowiska aplikacji WWW jest uniknięcie „Twój interfejs użytkownika znajduje się w moim kodzie, a Twój kod znajduje się w moim interfejsie użytkownika”.

Chciałbym ostrożnie w systemach takich jak cppcms. Spodziewałbym się, że oferuje coś podobnego.

Nie potrzebujesz języka skryptowego, aby zapewnić elastyczność i wydajność.

Bill Door
źródło