Как взаимодействует C ++ с сетью (например, в Google)?

12

Google хорошо известен своим смешным количеством C ++, которое они кодировали годами. Поправьте меня, если я ошибаюсь, но большая часть основной поисковой системы Google написана на C ++, не так ли? Как взять программу, написанную на C ++, и связать ее с веб-сайтом?

Примечание. Я не обращаю внимания на то, как Google это делает, а на то, как это можно сделать в целом.

Маниакальная наука
источник
Что ж, Google построил большую часть своих приложений на python, и теперь Java также часто используется. Google не будет ограничивать использование языков. Для веб-интерфейса используются сокеты. Ничего из C ++, но из C apis. С ++ не имеет своего !!
user1708086

Ответы:

16

Любое веб-программное обеспечение будет отправлять и получать сообщения только через сокеты, вот и все. Вы можете использовать любой язык для этого, это не относится к языкам.

Однако вам лучше не изобретать колесо для такой работы, поэтому большинство языков, используемых для веб-приложений, имеют свой набор фреймворков, который обеспечивает базовую связь для вас, чтобы позволить вам сконцентрироваться на специфике вашего проекта. Ruby имеет ROR, Python имеет Django и другие, Java как ... и т. Д.

C ++ исторически до недавнего времени не имело подобной инфраструктуры:

  • современный C ++ способ сделать это - использовать что-то вроде CPPCMS ;
  • также предпринимаются попытки установить стандартную библиотеку для веб-разработчика. в C ++ одним из них является cpp-netlib ;
  • Недавно была выпущена кроссплатформенная библиотека REST API для C ++ 11 от Microsoft под названием Casablanca, которая также помогает;

Теперь «нелепое количество C ++», созданное Google, необходимо, потому что вам нужны очень высокопроизводительные модули для решения задач, которые решает Google. Удачи в попытках сделать то же самое без какого-либо модуля, написанного на языке, ориентированном на производительность. Я рекомендую прочитать вики CPPCMS на эту тему, чтобы лучше понять. Что касается исторических фактов, Amazon, Google, Facebook (см. Хип-хоп и недавние интервью с Александреску) и некоторые другие действительно большие веб-сервисы имеют ядра в C ++ по очевидным вычислительным причинам, которые важнее, чем время, потраченное на производительность программиста.

CPPCMS и cpp-netlib являются открытым исходным кодом, вы можете изучить их, если хотите знать, как заставить приложение работать как веб-сервис с использованием C ++. Тем не менее, любое приложение, которое может прослушивать порты и отправлять данные в порт, может это сделать, все дело в протоколах (TCP / IP, HTTP и т. Д.) , А не в коде.

Klaim
источник
Пока не могу молчать, но я принял ваш ответ. Я не знал, что существует что-то вроде CPPCMS, но это приятно знать. Благодаря!
Маниакальная наука
1
Я понимаю, это довольно новое по сравнению с другими. Другие плохие (по моему собственному совету) решения существовали ранее, но я думаю, что это больше подходит для языка и проблемы.
Klaim
1
В C ++ были такие фреймворки - раньше сеть работала исключительно с приложениями cgi, ISAPI-библиотеками MS или даже Microsoft ATLServer. В настоящее время у нас есть несколько веб-фреймворков на c ++, и Microsoft работает над Casablanca, которая предоставляет вам c ++ в качестве облачных сервисов.
gbjbaanb
Следует отметить, что большинство веб-приложений живут за внешним сервером и взаимодействуют с ним либо CGI, который передает данные в среде, stdin и stdout, либо FCGI, который использует сокеты и несколько более простой протокол, чем HTTP.
Ян Худек
3

Как и любой другой язык ....

Откройте сокет TCP, отправляйте и получайте сообщения http. Разбирай их и делай вещи на основе контента.

Посмотрите на Qt пример на платформе c ++, которая поддерживает некоторые базовые функции http.

Существуют также специальные веб-фреймворки для C ++. Не много и не широко используется, AFAIK. Вероятно потому, что если вы работаете в Интернете через C ++, вы все равно делаете что-то очень специализированное и хотите получить полный контроль над всем.

Маке
источник
Я, наверное, должен был понять это сам. Единственное веб-программирование, которое я делал, было через Django, так что все было удалено.
Маниакальная наука
Я понял это. Джанго хорош, но если вы углубитесь в него, вы увидите, что основная часть не очень хитрая. Теперь, написав Django-эквивалент в C ++, есть интересная задача. ;)
Маке
@Macke Ну, я думаю, что CPPCMS - это интересный вызов, хотя и не уверен. Отсутствие стандартной сети в C ++ не помогает, но есть множество решений для работы с ней. Я полагаю, что основная проблема с C ++ заключается в том, что трудно создавать обновления без перезапуска исполняемого файла, а также иногда приходится долго компилировать. CPPCMS помогает в этом, хотя.
Клаим
Кстати, для современной, хорошей асинхронной сетевой библиотеки c ++ я рекомендую библиотеку ASIO, доступную как часть превосходного пакета Boost. Я написал несколько простых приложений клиент / сервер TCP / UDP, и это довольно красиво.
Маке
2

С точки зрения клиента, если у вас есть программа на C / C ++ и вы хотите использовать ее для общения с Интернетом, вы должны использовать libcurl. Это в значительной степени стандартная (и всеобъемлющая) библиотека для подключения к URL-адресам http для отправки и получения данных. Есть несколько других библиотек - у Microsoft есть несколько, есть несколько открытых.

Теперь это для простых старых URL через http (или SMTP, или FTP, или Gopher, или ... libcurl очень всеобъемлющий!) Если вы пытаетесь использовать веб-сервисы через SOAP, вы можете использовать одну из многих других библиотек, таких как gsoap.

Для серверной части вам нужен веб-сервер или инфраструктура, которая предоставляет ваш код C ++. Опять же, есть много способов сделать это - все самые ранние веб-программы были на C / C ++, написанные как CGI-программы, где веб-сервер вызывал ваше приложение с использованием формы IPC. С тех пор у нас есть Wt, Qt, cppCMS, ffead и все они от Microsoft (ISAPI, ATLServer, а теперь и Касабланка).

Я думаю, что причина, по которой no-onne действительно использует C ++ для своего веб-программирования, заключается в том, что другие языки поставляются с этими библиотеками. В C ++ (как всегда) вы должны найти библиотеку для использования, тогда как PHP просто готов к работе в Интернете.

gbjbaanb
источник
-4

Клиент-серверная архитектура позволяет этому случиться.

C ++ может быть использован для разработки сервера.

На стороне клиента веб-технологии могут использоваться для связи с сервером.

Программист в раю
источник