Apakah ada kelemahan konseptual untuk membangun aplikasi web dengan C ++ dan MySQL?

10

Saya telah mewarisi proyek yang cukup menarik di mana ada peluang bagus untuk mengambil perangkat lunak yang ada dan mengubahnya menjadi aplikasi web SaaS. Karena proyek ini diwarisi, basis kode / kerangka kerja telah didefinisikan sebagai C ++ dan MySQL. Aplikasi itu sendiri dikompilasi dan dijalankan sebagai EXE di Windows Server. UI berbasis web dan aplikasi berfungsi sebagai semacam server. Dari apa yang saya ketahui tentang aplikasi web modern, ini mungkin merupakan pilihan yang tidak biasa. Saat ini, kebanyakan orang tampaknya memilih kerangka kerja PHP atau Ruby on Rails. Tentu saja itulah kesan yang saya dapatkan dari membaca blog tentang topik tersebut. Jadi, saya sangat tertarik untuk mengetahui apakah C ++ EXE yang didukung oleh MySQL merupakan dasar yang kuat untuk aplikasi web, atau apakah kita harus mencari cara lain untuk membangun?

jnthnclrk
sumber
Apa yang Anda gambarkan terdengar lebih seperti proses server dan bukan webapp. Dan untuk proses server PHP atau RoR tentu saja merupakan pilihan yang tidak biasa. Masalah apa yang sebenarnya Anda miliki?
Benjamin Bannier
Apakah exe mungkin menggunakan Hostable Web Core baru ( awesomeideas.net/page/IIS7-Hostable-WebCore.aspx ) atau apakah ia benar-benar mengimplementasikan server HTTP itu sendiri dari awal? Jika yang pertama, maka mungkin mereka benar-benar mencoba untuk membuat aplikasi yang sangat cepat dengan menggunakan C ++ dan hosting sendiri untuk portabilitas ke mesin klien ..
Jimmy Hoffa
Tentu saja siapa pun yang waras akan menggunakan sesuatu seperti POCO's Net :: HTTPServer alih-alih menulis server HTTP dari awal. Tetapi tidak seperti RoR atau misalnya kerangka kerja Python tidak mengemas beberapa server web.
Benjamin Bannier
4
Bukan hal yang aneh untuk memiliki c ++ sebagai backend dari aplikasi web. Pencarian Google ditulis dalam c ++. Banyak aplikasi yahoo adalah c ++. Hampir setiap aplikasi web AAA yang digunakan oleh jutaan orang ditulis dalam c ++.
Lord Tydus
Ya, aplikasi dirancang sebagai server web khusus. Jadi sisi aplikasi web itu berasal dari HTML admin UI dan set fitur.
jnthnclrk

Jawaban:

20

Tidak apa-apa untuk membuat aplikasi web menggunakan C ++ JIKA manfaatnya melebihi biaya, jelas. Google, Amazon, Facebook semuanya dibangun dengan C ++ untuk efisiensi dalam kecepatan, memori dan energi - alias biaya server.

Namun seperti yang Anda duga, ada kelemahan menggunakan C ++ untuk ini. Itu tergantung pada alat Anda.

Pertama-tama izinkan saya mengutip situs web cppcms tentang ini:

Kapan CppCMS Harus Digunakan.

Bahasa C ++ masih jauh dari populer untuk pengembangan Web karena berbagai alasan: kurangnya alat yang tepat, keterampilan pengembang dan banyak lagi.

Namun, ada area di mana pemrograman web C ++ dengan CppCMS menjadi sangat berguna dan efisien, dan beberapa di antaranya hanya membuang-buang waktu.

Kapan CppCMS harus atau dapat digunakan?

1. Situs web dan aplikasi beban tinggi dengan ratusan dan ribuan hit per detik, di mana kinerja tinggi, efisiensi dan skalabilitas diperlukan.

2. Aplikasi yang membutuhkan teknologi Push Comet / Server yang dapat diskalakan --- CppCMS secara efisien dapat menangani ratusan dan ribuan koneksi HTTP simultan dengan penggunaan sumber daya yang minimal.

3.Masukkan antarmuka web ke dalam aplikasi / layanan C ++ yang ada dengan sedikit biaya perpustakaan tambahan.

4.Embedded underpowered devices - CppCMS memungkinkan pembuatan aplikasi yang kaya dengan biaya perangkat keras yang relatif rendah yang akan berkinerja cukup cepat.

Kapan Tidak Digunakan?

Jika Anda membuat aplikasi web kecil yang tidak membutuhkan beban tinggi dan membutuhkan periode waktu ke pasar yang sangat singkat - mungkin alat seperti Django atau RoR akan lebih sesuai untuk tugas-tugas tersebut.

Kerugian khusus untuk C ++ adalah:

  • Waktu kompilasi bisa sangat sangat sangat sangat lambat dibandingkan dengan bahasa lain. Ini mungkin memengaruhi iterasi, interval rilis tetapi juga moral pengembang. Pastikan itu sepadan.
  • Sebagian besar waktu, Anda perlu mengkompilasi perubahan. Itu bisa dihindari tapi itu biasa.
  • Menulis C ++ modern membuatnya mudah (untuk belajar, membaca, menulis, men-debug, dll.), Tetapi banyak pengembang C ++ tidak tahu apa itu C ++ Modern. Jadi jika Anda bekerja dalam tim, Anda harus memiliki pengetahuan yang baik tentang C ++ Modern dari seluruh tim. Jika tidak, Anda akan dengan mudah masuk ke bug yang sangat rumit. Yang mengatakan, ini lebih merupakan masalah orang daripada masalah bahasa. Hanya saja sejarah C ++ tidak membantu membuatnya mudah untuk dipahami. Pengajaran yang baik tidak biasa seperti dalam bahasa yang lebih modern (secara historis).
  • Unicode masih kurang didukung oleh bahasa inti C ++, menjadikannya sumber potensial rasa sakit yang hebat. Cukup gunakan UTF-8 di mana-mana dan beberapa perpustakaan (lihat dorongan) untuk mengelolanya.
  • Standar C ++ tidak tahu apa itu perpustakaan. Jadi kami menggunakan cara konvensional untuk mengelolanya pada kompiler / penghubung / OS yang berbeda. Ini mungkin menjadi masalah jika Anda mulai masuk ke kode lintas platform yang perlu memuat / membongkar beberapa modul.

Mungkin lihat CPPCMS? Atau mungkin jika Anda ingin membuat situs web bergaya GUI?

Periksa juga pertanyaan-pertanyaan ini:

Klaim
sumber
3
Pemahaman saya adalah bahwa Facebook diprogram dalam PHP, tetapi mereka juga membangun kompiler asli mereka sendiri untuk PHP di C ++ untuk Linux. Alasan utama Facebook mengembangkan kompiler adalah untuk mengurangi biaya listrik mereka untuk server operasi. Itu tidak benar-benar cepat (lebih cepat) tetapi fakta bahwa itu membutuhkan penggunaan CPU lebih sedikit per permintaan. Ini adalah proyek open source yang dapat ditemukan di sini. developers.facebook.com/blog/post/2010/02/02/…
Reactgular
1
Ya, alasannya bervariasi, itu sebabnya saya menyebutkan biaya energi dan server. Karena itu, kata Alexandrescu baru-baru ini dalam sebuah wawancara, saya percaya, semakin banyak kode Facebook yang ditulis langsung dalam C ++, tetapi dia tidak menyebutkan alasannya, jika ingatan saya benar. Mereka juga menyediakan pustaka sumber terbuka yang penuh dengan utilitas / algoritme C ++: Folly facebook.com/notes/facebook-engineering/…
Klaim
Juga perhatikan bahwa meskipun kode pertama kali ditulis dalam PHP terlebih dahulu kemudian dikonversi ke C ++, 3 kelemahan yang saya tunjuk masih benar.
Klaim
2
Kerangka kerja web C ++ lainnya: wt (witty). Ini untuk orang yang ingin membuat aplikasi web yang berfungsi seperti aplikasi desktop di bawah tenda. Untuk porting, itu pilihan yang bagus.
K.Steff
Saya pikir semua situs tersebut memiliki komponen yang ditulis dalam berbagai bahasa. C ++ kemungkinan besar digunakan sebagai optimisasi untuk bagian-bagian kode yang memerlukan manajemen memori yang lebih baik.
jiggy
3

Wordpress berjalan dalam PHP dengan beberapa plugin terinstal membuat server Winders saya bertekuk lutut. Jadi saya tidak punya masalah sama sekali dengan gagasan menerapkan aplikasi web di C ++. Kecepatan adalah bagian penting dari pengalaman web.

Tenda desain grafis untuk mendorong sebagian besar proyek web. PHP adalah bahasa skrip yang tidak jelas yang berjalan di dalam HTML. Mengizinkan penulis PHP melarikan diri masuk dan keluar dari HTML. Ada banyak manfaat dengan bekerja dengan HTML sebagai hasilnya.

Namun, Anda dapat menerapkan sejumlah solusi template HTML di C ++.

Seseorang bisa memberi Anda daftar panjang kerangka Python dan PHP yang membuat perkembangan cepat, tetapi jika Anda punya banyak waktu maka C ++ pasti mungkin.

Yang tidak saya mengerti adalah keputusan Anda untuk melakukan C ++ di Windows. lol

Reactgular
sumber
1
Argumen pria jerami klasik, ada banyak alternatif cepat yang lebih baik untuk wordpress / php yang bukan C ++. Saya tidak mengatakan C ++ bukan pilihan yang relevan, hanya saja argumen Anda tidak benar-benar dibingkai dengan baik.
Jimmy Hoffa
Saya setuju dengan kamu. Saya tidak berpikir saya mencoba menjadikan wordpress sebagai alternatif. Hanya saja pengalaman saya akhir-akhir ini seperti yang ditunjukkan sulit untuk mendapatkan kinerja yang baik dari kerangka kerja populer.
Reactgular
1
StackExchange berjalan pada kerangka ASP.NET MVC. Node.Js adalah kinerja tinggi berbobot rendah dan jika Anda benar-benar ingin sesuatu yang berkinerja konyol ada kerangka kerja Snap atau Yesod Haskell yesodweb.com/blog/2011/03/… , Haskell, JavaScript, dan C # semuanya adalah bahasa sampah yang dikumpulkan dengan tingkat tinggi.
Jimmy Hoffa
1
Pikirkan bahwa kecepatan eksekusi Kode pada server dalam banyak kasus bukanlah faktor pembatas dalam aplikasi web. Sebagian besar waktu dihabiskan menunggu sesuatu (database) atau bahkan di ujung depan (mengambil CSS, gambar, melakukan hal-hal JavaScript, rendering HTML)
johannes
1

Ini tentu merupakan pilihan yang tidak biasa. C ++ tidak dirancang dengan aplikasi web dalam pikiran, dan sementara perpustakaan ada untuk menulis, katakanlah, aplikasi FastCGI dengan C ++, Anda harus melakukan lebih banyak pekerjaan untuk mendapatkan aplikasi dasar Anda. "Bahasa Web" biasanya melakukan banyak hal untuk Anda yang harus Anda dapatkan dari tempat lain di C ++, seperti menerapkan protokol HTTP, menghasilkan HTML, dll.

Selain itu, aplikasi web kebanyakan tentang string, yang bukan sisi terkuat C ++ - tidak ada tipe string yang dibangun ke dalam bahasa itu sendiri, dan ini mengarah pada beberapa keanehan dan membuat pemrosesan string lebih kikuk daripada pada yang lebih tinggi. bahasa tingkat Menangani pengkodean karakter dengan benar di C ++ berbatasan dengan ilmu hitam. Dan C ++ dapat crash sangat keras, pada kode yang tampak tidak bersalah, yang jauh lebih kecil kemungkinannya dengan bahasa tingkat yang lebih tinggi (mereka juga bisa crash, tetapi dalam kebanyakan kasus, server web dapat pulih dengan anggun, terutama pada platform yang menggunakan per -meminta model siklus hidup, seperti PHP).

Yang mengatakan, jika Anda memiliki sebagian besar basis kode yang sudah ditulis, C ++ mungkin masih menjadi pilihan yang layak. Anda perlu menemukan beberapa perpustakaan untuk mencakup semua hal web (terutama, Anda ingin dapat mengintegrasikan server web HTTP mandiri ke dalam program Anda, atau menghubungkan ke, katakanlah, Apache, baik melalui FastCGI atau dengan mengompilasi ke sebuah modul; Anda juga akan menginginkan semacam templating library untuk membuat rendering dokumen HTML tidak menyakitkan).

Akhirnya, ada masalah pasar pengembang. Ada banyak pengembang C ++ yang tersedia, dan bahkan lebih banyak pengembang web, tetapi tumpang tindihnya mungkin tidak terlalu besar, jadi jika Anda perlu mempekerjakan orang untuk mengerjakan hal ini, Anda akan memiliki waktu yang agak sulit daripada dengan, katakanlah, PHP

tammmer
sumber
1

Seperti yang orang lain katakan, secara konseptual, C ++ adalah lingkungan yang baik untuk pengembangan server web. Namun, ada beberapa pertimbangan saat Anda membuat keputusan itu.

Popularitas bahasa scripting untuk desain server web berbalik waktu. Perubahan sederhana dapat dilakukan dengan mudah dengan mendemonstrasikan hasil hampir secara langsung. Anda akan menemukan bahwa setiap desain server web yang bagus akan menawarkan kemampuan yang serupa. Memang, C ++ adalah lingkungan yang sangat baik untuk mencapai tujuan itu.

Kunci untuk membangun sistem aplikasi server web yang baik adalah pemisahan UI dari kode. Tujuan dalam membangun lingkungan aplikasi web adalah untuk menghindari "UI Anda ada dalam kode saya dan kode Anda ada di UI saya."

Saya ingin hati-hati di sistem seperti cppcms. Saya berharap itu menawarkan sesuatu yang serupa.

Anda tidak memerlukan bahasa skrip untuk menawarkan fleksibilitas dan kinerja.

Bill Door
sumber