Як один інтерфейс C ++ з Інтернетом (наприклад, у Google)?


12

Google добре відомий смішною кількістю C ++, яку вони кодували протягом багатьох років. Виправте мене, якщо я помиляюся, але значна частина основної пошукової системи Google написана на C ++, чи не так? Як можна приймати програму, написану на C ++, та інтерфейсувати її з веб-сайтом?

Примітка. Я не шукаю, як саме це робить Google, а як це можна зробити взагалі.


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

Відповіді:


16

Будь-яке веб-програмне забезпечення надсилатиме та отримує повідомлення лише через сокети, ось і все. Ви можете використовувати будь-яку мову для цього, вона не характерна для мов.

Однак вам краще не винаходити колесо для подібної роботи, тому більшість мов, які використовуються для веб-додатків, мають набір фреймворків, які є основним для вас спілкуванням, щоб ви могли сконцентруватися на особливостях вашого проекту. У Ruby є ROR, у Python є Django та інші, Java як ... тощо.

Історія C ++ до недавнього часу не мала подібних рамок:

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

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

CPPCMS і cpp-netlib, будучи відкритим кодом, ви можете їх вивчити, якщо ви хочете знати, як змусити програму працювати як веб-сервіс за допомогою C ++. Однак, будь-яка програма, яка може слухати порти та надсилати дані до порту, може це зробити, це все стосується протоколів (TCP / IP, HTTP тощо) , а не коду.


Поки ще не можна проголосувати тихо, але я прийняв вашу відповідь. Я не знав нічого подібного CPPCMS, але це добре знати. Дякую!
Маніакальна наука

1
Я розумію, це досить нове порівняно з іншими. Інші погані (на мою власну пораду) рішення існували і раніше, але я думаю, що це найбільше підходить до мови та проблеми.
Клаїм

1
У C ++ були такі рамки - Інтернет використовувався повністю з програмами cgi, або ISAPI MS MS, або навіть ATLServer Microsoft. На сьогоднішній день у нас є кілька веб-рамок c ++, і Microsoft працює над Касабланка, яка дає вам c ++ як хмарні сервіси.
gbjbaanb

Слід зазначити, що більшість веб-додатків живуть за сервером на передньому кінці та спілкуються з ним або CGI, який передає дані в оточення, stdin та stdout, або FCGI, який використовує сокети та дещо простіший протокол, ніж HTTP.
Ян Худек

3

Як і будь-яка інша мова ....

Відкрийте розетку TCP, надсилайте та отримуйте повідомлення http. Розбирайте їх і робіть матеріали на основі вмісту.

Подивіться на Qt для прикладу рамки c ++, яка підтримує деякі основні функції http.

Існують також спеціальні веб-рамки для C ++. Не багато, ні широко використовуються, AFAIK. Можливо, тому, що якщо ви працюєте в Інтернеті через C ++, ви все одно робите щось дуже спеціалізоване і хочете повного контролю над усім.


Напевно, я міг би сам це зрозуміти. Єдине веб-програмування, яке я робив, пройшло через Джанго, тому все було абстраговано.
Маніякальна наука

Я зрозумів це. Джанго приємно, але якщо заглибитися в нього, ви побачите, що основна частина не дуже хитра. Тепер, написання еквівалента Джанго в C ++, є цікаве завдання. ;)
Макке

@Macke Ну, мабуть, CPPCMS - це цікаве завдання, але не впевнений. Відсутність стандартних мереж в C ++ не допомагає, але для цього є багато рішень. Основна проблема C ++, мабуть, полягає в тому, що важко робити оновлення без перезавантаження виконуваного файлу, а інколи також так довго збирати. CPPCMS допомагає в цьому.
Клаїм

Btw, для сучасної гарної асинхронної мережевої бібліотеки c ++ я рекомендую бібліотеку ASIO, доступну як частину відмінного пакету Boost. Я написав кілька простих програм TCP / UDP для клієнта / сервера, і це дуже красиво.
Макке

2

З точки зору клієнта, якщо у вас є програма C / C ++ і ви хочете використовувати її для спілкування в Інтернеті, ви б використовували libcurl. Це майже стандартна (і всебічна) бібліотека для підключення до 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 просто готовий зайти в Інтернет.


-4

Архітектура клієнт-сервер дозволяє це робити.

C ++ може використовуватися для розробки сервера.

З боку клієнта веб-технології можуть використовуватися для спілкування з сервером.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.