Jak jeden interfejs C ++ łączy się z Internetem (na przykład w Google)?

12

Google jest dobrze znany z absurdalnej ilości C ++, którą kodowali przez lata. Popraw mnie, jeśli się mylę, ale duża część podstawowej wyszukiwarki Google jest napisana w C ++, prawda? Jak wziąć program napisany w C ++ i połączyć go ze stroną internetową?

Uwaga: nie szukam sposobu, w jaki Google to robi, tylko tego, jak można to zrobić w ogóle.

Nauka maniakalna
źródło
Cóż, Google zbudował większość swoich aplikacji w Pythonie, a teraz Java jest również często używana. Google nie będzie ograniczać użycia języków. Do interfejsu sieci używane są gniazda. Nic z C ++, ale z C apis. C ++ nie ma własnego !!
user1708086

Odpowiedzi:

16

Każde oprogramowanie sieciowe wysyła i odbiera wiadomości tylko przez gniazda, to wszystko. Możesz do tego użyć dowolnego języka, nie jest on specyficzny dla języków.

Jednak lepiej nie wymyślać na nowo koła tego rodzaju pracy, więc większość języków używanych do tworzenia aplikacji internetowych ma swój zestaw ram, który zapewnia podstawową komunikację, umożliwiając skoncentrowanie się na specyfice projektu. Ruby ma ROR, Python ma Django i inne, Java jako ... itd.

C ++ do niedawna nie miał podobnego frameworka:

  • nowoczesnym sposobem na zrobienie tego jest użycie czegoś takiego jak CPPCMS ;
  • staramy się również skonfigurować standardową bibliotekę dla web dev. w C ++, jednym z nich jest cpp-netlib ;
  • Ostatnio pojawiła się wersja wieloplatformowej biblioteki REST API dla C ++ 11 firmy Microsoft o nazwie Casablanca, która również pomaga;

Teraz „śmieszna ilość C ++”, którą Google zbudował, jest konieczna, ponieważ musisz mieć bardzo wydajne moduły, aby rozwiązać rodzaj problemów, które rozwiązuje Google. Powodzenia w robieniu tego samego bez modułu napisanego w języku skoncentrowanym na wydajności. Polecam przeczytać wiki CPPCMS na ten temat, aby lepiej zrozumieć. Historyczne fakty, Amazon, Google, Facebook (patrz Hip Hop i ostatnie wywiady z Alexandrescu) i niektóre inne naprawdę duże serwisy internetowe mają rdzenie w C ++, z oczywistych powodów obliczeniowych, które są ważniejsze niż czas stracony na produktywności programisty.

CPPCMS i cpp-netlib są oprogramowaniem typu open source, możesz je przestudiować, jeśli chcesz wiedzieć, jak sprawić, by aplikacja działała jako usługa internetowa przy użyciu C ++. To powiedziawszy, każda aplikacja, która może nasłuchiwać portów i wysyłać dane do portu, może potencjalnie to zrobić, chodzi o protokoły (TCP / IP, HTTP itp.) , A nie kod.

Klaim
źródło
Nie mogę jeszcze głosować cicho, ale zaakceptowałem twoją odpowiedź. Nie wiedziałem, że istnieje coś takiego jak CPPCMS, ale dobrze jest wiedzieć. Dzięki!
Maniacal Science
1
Rozumiem, jest całkiem nowy w porównaniu do innych. Inne słabe (według mojej opinii) rozwiązania istniały wcześniej, ale myślę, że to bardziej pasuje do języka i problemu.
Klaim
1
C ++ miał takie frameworki - sieć działała wcześniej wyłącznie z aplikacjami cgi, bibliotekami ISAPI MS, a nawet ATLServer Microsoftu. Obecnie mamy kilka frameworków internetowych c ++, a Microsoft pracuje nad Casablanką, która daje ci c ++ jako usługi w chmurze.
gbjbaanb
Należy wspomnieć, że większość aplikacji internetowych żyje za serwerem frontonu i rozmawia z nim albo CGI, który przekazuje dane w środowisku, stdin i stdout lub FCGI, który wykorzystuje gniazda i nieco prostszy protokół niż HTTP.
Jan Hudec
3

Jak każdy inny język ....

Otwórz gniazdo TCP, wysyłaj i odbieraj wiadomości HTTP. Analizuj je i rób rzeczy na podstawie zawartości.

Spójrz na Qt na przykład na platformie c ++, która obsługuje niektóre podstawowe funkcje HTTP.

Istnieją również dedykowane ramy sieciowe dla C ++. Niewiele i szeroko stosowane, AFAIK. Prawdopodobnie dlatego, że jeśli tworzysz sieć przez C ++, i tak robisz coś bardzo wyspecjalizowanego i chcesz mieć pełną kontrolę nad wszystkim.

Macke
źródło
Prawdopodobnie powinienem był to sam zrozumieć. Jedyne programowanie internetowe, które zrobiłem, to program Django, więc wszystko to zostało oderwane.
Maniacal Science
Zauważyłem to. Django jest fajny, ale jeśli go zagłębisz, zobaczysz, że podstawowa część nie jest bardzo trudna. Teraz, pisanie ekwiwalentu Django w C ++, jest zabawnym wyzwaniem. ;)
Macke
@Macke Cóż, myślę, że CPPCMS to zabawne wyzwanie, choć nie jestem pewien. Brak standardowych sieci w C ++ nie pomaga, ale istnieje mnóstwo rozwiązań do pracy z nim. Wydaje mi się, że głównym problemem związanym z C ++ jest to, że trudno jest aktualizować bez restartowania pliku wykonywalnego, a czasem kompilacja jest tak długa. CPPCMS pomaga w tym jednak.
Klaim
Btw, dla nowoczesnej, dobrej biblioteki c ++ asynchronicznej sieci polecam bibliotekę ASIO, dostępną jako część doskonałego pakietu Boost. Napisałem w nim kilka prostych aplikacji klient / serwer TCP / UDP i jest to dość piękne.
Macke
2

Z perspektywy klienta, jeśli masz program C / C ++ i chcesz go używać do komunikowania się z Internetem, możesz użyć libcurl. To prawie standardowa (i kompleksowa) biblioteka do łączenia się z adresami URL w celu wysyłania i odbierania danych. Istnieje kilka innych bibliotek - Microsoft ma kilka, jest kilka bibliotek typu open source.

Teraz dotyczy to zwykłych starych adresów URL za pośrednictwem protokołu http (lub SMTP, FTP, Gopher lub… libcurl jest bardzo obszerny!) Jeśli próbujesz korzystać z usług internetowych przez SOAP, możesz użyć jednej z wielu innych bibliotek, takich jak gsoap.

Po stronie serwera potrzebujesz serwera WWW lub frameworka, który ujawnia Twój kod C ++. Znów jest na to wiele sposobów - najwcześniejszymi programami WWW były wszystkie C / C ++, napisane jako programy CGI, w których serwer wywoływał twoją aplikację za pomocą formy IPC. Od tego czasu mamy Wt, Qt, cppCMS, ffead i wszystkie te od Microsoft (ISAPI, ATLServer, a teraz Casablanca).

Myślę, że powodem, dla którego nikt tak naprawdę nie używa C ++ do programowania w Internecie, jest to, że inne języki są dostarczane z tymi bibliotekami. C ++ (jak zawsze) musisz znaleźć bibliotekę do użycia, podczas gdy PHP jest po prostu gotowe do pracy w Internecie.

gbjbaanb
źródło
-4

Architektura klient-serwer pozwala na to.

Do opracowania serwera można użyć C ++.

Po stronie klienta do komunikacji z serwerem można wykorzystać technologie sieciowe.

Programmer In Paradise
źródło