1つはC ++とWebをどのようにインターフェースしますか(たとえばGoogleで)?


12

グーグルは、長年コーディングしてきた途方もない量のC ++で有名です。間違っている場合は修正してください。ただし、Googleの主要な検索エンジンの大部分はC ++で作成されています。C ++で書かれたプログラムをどのように取り、Webサイトとインターフェイスさせるのですか?

注:私は、特にGoogleがこれを行う方法を探しているのではなく、一般的にどのように行われるかを探しています。


さて、Googleはほとんどのアプリケーションをpythonで構築しており、現在ではJavaも多く使用されています。Googleは言語の使用を制限しません。Webインターフェースには、ソケットが使用されます。C ++ではなく、C APIです。C ++には独自の機能はありません!!
user1708086

回答:


16

すべてのWebソフトウェアは、ソケットを介してのみメッセージを送受信します。それだけです。これを行うには任意の言語を使用できますが、これは言語固有ではありません。

ただし、この種の作業のために車輪を再発明しない方がよいので、Webアプリケーションを行うために使用されるほとんどの言語には、プロジェクトの特異性に集中できるように、基本的な通信を行うフレームワークのセットがあります。RubyにはROR、PythonにはDjangoなど、Javaには...などがあります。

C ++には、最近まで同様のフレームワークがありませんでした。

  • それを行う現代のC ++の方法は、CPPCMSのようなものを使用することです。
  • Web開発用の標準ライブラリをセットアップする努力もあります。C ++では、そのうちの1つはcpp-netlibです。
  • 最近、Casablancaと呼ばれるMicrosoftのC ++ 11用のクロスプラットフォームREST APIライブラリがリリースされました。

Googleが解決する種類の問題を解決するには、非常に高性能なモジュールが必要なので、Googleが構築する「途方もない量のC ++」が必要になります。パフォーマンスに焦点を当てた言語で書かれたモジュールなしで同じことをしようとして頑張ってください。理解を深めるために、このテーマに関するCPPCMS wikiを読むことをお勧めします。歴史的な事実については、Amazon、Google、Facebook(Hip Hopと最近のAlexandrescuのインタビューを参照)および他のいくつかの本当に大きなWebサービスにはC ++のコアがあります。

CPPCMSとcpp-netlibはオープンソースであり、C ++を使用してアプリケーションをWebサービスとして機能させる方法を知りたい場合は、それらを調べることができます。ただし、ポートをリッスンし、ポートにデータを送信できるアプリケーションは、潜在的にこれを行うことができます。コードではなく、プロトコル(TCP / IP、HTTPなど)がすべてです。


まだ静かに支持できませんが、あなたの答えを受け入れました。CPPCMSのようなものは存在していませんでしたが、知っておくと良いでしょう。ありがとう!
マニアカルサイエンス

1
私は理解している、それは他のものに比べてかなり新しいです。他の貧弱な(私自身のアドバイスでは)解決策は以前から存在していましたが、これは言語や問題により適していると思います。
クライム

1
C ++にはそのようなフレームワークがありました。Webは、cgiアプリ、MSのISAPI dll、またはMicrosoftのATLServerで完全に実行されていました。現在、いくつかのc ++ Webフレームワークがあり、Microsoftはc ++をクラウドサービスとして提供するCasablancaに取り組んでいます。
gbjbaanb

ほとんどのWebアプリケーションはフロントエンドサーバーの背後にあり、環境、stdinおよびstdoutでデータを渡すCGI、またはソケットとHTTPよりもやや単純なプロトコルを使用するFCGIのいずれかと通信することに注意してください。
ジャン・ヒューデック

3

他の言語と同様....

TCPソケットを開き、httpメッセージを送受信します。それらを解析し、コンテンツに基づいて作業を行います。

基本的なhttp機能をサポートするc ++フレームワークの例については、Qtをご覧ください。

C ++専用のWebフレームワークもあります。あまり知られておらず、広く使われているわけでもない。おそらく、C ++を介してWebを行う場合は、とにかく非常に特殊化された操作を行っており、すべてを完全に制御する必要があるためです。


おそらく自分でこれを理解できたはずです。私が行った唯一のWebプログラミングはDjangoを介して行われたため、すべて抽象化されました。
マニアカルサイエンス

私はそれを考え出した。Djangoは優れていますが、掘り下げてみると、コア部分はそれほどトリッキーではないことがわかります。今、C ++でDjangoに相当するものを書くと、楽しいチャレンジがあります。;)
マッケ

@Mackeまあ、CPPCMSは楽しいチャレンジだと思いますが、確かではありません。C ++に標準的なネットワークが存在しないことは助けにはなりませんが、C ++で動作する多くのソリューションがあります。C ++の主な問題は、実行可能ファイルを再起動せずに更新を行うことが難しく、コンパイルするのに時間がかかることです。ただし、CPPCMSが役立ちます。
クライム

ところで、最新の優れた非同期ネットワークc ++ライブラリには、優れたBoostパッケージの一部として利用できるASIOライブラリをお勧めします。シンプルなTCP / UDPクライアント/サーバーアプリをいくつか作成しましたが、非常に美しいです。
マッケ

2

クライアントの観点から、C / C ++プログラムがあり、それを使用してインターネットと通信したい場合、libcurlを使用します。これは、データを送受信するためにhttp urlに接続するための標準(および包括的な)ライブラリです。他にもいくつかのライブラリがあります-マイクロソフトにはいくつかありますが、いくつかのオープンソースのものがあります。

これで、http経由の単純な古いURL(またはSMTP、FTP、Gopher、またはlibcurlが非常に包括的です!) gsoap。

サーバー側では、C ++コードを公開するWebサーバーまたはフレームワークが必要です。繰り返しますが、これを行うには多くの方法があります-初期のWebプログラムはすべてC / C ++であり、WebサーバーがIPCの形式を使用してアプリを呼び出すCGIプログラムとして記述されていました。それ以来、Wt、Qt、cppCMS、ffead、およびMicrosoftのすべて(ISAPI、ATLServer、現在はカサブランカ)があります。

no-onneがWebプログラミングに実際にC ++を使用する理由は、他の言語がこれらのライブラリにあらかじめパッケージ化されているためだと思います。C ++(いつものように)使用するライブラリを見つける必要がありますが、PHPはWebに移行する準備ができています。


-4

クライアントサーバーアーキテクチャはこれを可能にします。

C ++を使用してサーバーを開発できます。

クライアント側では、Webテクノロジーを使用してサーバーと通信できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.