Có bất kỳ nhược điểm khái niệm nào để xây dựng một ứng dụng web với C ++ và MySQL không?


10

Tôi đã kế thừa một dự án khá thú vị, nơi có cơ hội tốt để lấy một phần mềm hiện có và biến nó thành một ứng dụng web SaaS. Khi dự án được kế thừa, cơ sở / khung mã đã được xác định là C ++ và MySQL. Bản thân ứng dụng được biên dịch và chạy dưới dạng EXE trên Windows Server. Giao diện người dùng dựa trên web và ứng dụng hoạt động như một loại máy chủ. Từ những gì tôi biết về các ứng dụng web hiện đại, đây có lẽ là một lựa chọn bất thường. Ngày nay, hầu hết mọi người dường như chọn một khung công tác PHP hoặc Ruby on Rails. Chắc chắn đó là ấn tượng tôi có được từ việc đọc blog về chủ đề này. Vì vậy, tôi rất muốn biết liệu C ++ EXE được hỗ trợ bởi MySQL có phải là nền tảng vững chắc cho một ứng dụng web hay không, liệu chúng ta có nên tìm cách xây dựng theo cách khác không?


Những gì bạn mô tả nghe giống như một quy trình máy chủ chứ không phải là một ứng dụng web. Và đối với các quy trình máy chủ, PHP hoặc RoR chắc chắn là những lựa chọn bất thường. Những loại vấn đề thực sự bạn có?
Benjamin Bannier

Liệu exe có thể sử dụng Lõi web có thể lưu trữ mới ( awesomeideas.net/page/IIS7-hostable-WebCore.aspx ) hay nó thực sự triển khai máy chủ HTTP của riêng mình từ đầu? Nếu trước đây, có lẽ họ đã thực sự cố gắng tạo ra một ứng dụng rất nhanh bằng cách sử dụng C ++ và tự lưu trữ nó để mang tính di động cho các máy khách ..
Jimmy Hoffa

Tất nhiên, bất kỳ ai cũng sẽ sử dụng cái gì đó như Net :: HTTPServer của POCO thay vì viết máy chủ HTTP từ đầu. Nhưng nó không giống như RoR hoặc ví dụ như các khung Python không đóng gói một số máy chủ web.
Benjamin Bannier

4
Không có gì lạ khi có c ++ là phần phụ trợ của ứng dụng web. Tìm kiếm Google được viết bằng c ++. Nhiều ứng dụng của yahoo là c ++. Khá nhiều ứng dụng web AAA được hàng triệu người sử dụng được viết bằng c ++.
Lord Tydus

Có, ứng dụng được thiết kế như một máy chủ web tùy chỉnh. Vì vậy, phía ứng dụng web của nó đến từ giao diện người dùng quản trị HTML và bộ tính năng.
jnthnclrk

Câu trả lời:


20

Rõ ràng là ổn khi tạo một ứng dụng web bằng C ++ NẾU lợi ích vượt trội hơn chi phí, rõ ràng. Google, Amazon, Facebook đều được xây dựng với C ++ cho hiệu quả về tốc độ, bộ nhớ và năng lượng - còn gọi là chi phí máy chủ.

Tuy nhiên, như bạn đoán, có những hạn chế khi sử dụng C ++ cho việc này. Nó phụ thuộc vào công cụ của bạn mặc dù.

Đầu tiên hãy để tôi trích dẫn trang web của cppcms về điều này:

Khi CppCMS nên được sử dụng.

Ngôn ngữ C ++ không còn phổ biến để phát triển Web vì nhiều lý do: thiếu công cụ thích hợp, kỹ năng của nhà phát triển và nhiều hơn nữa.

Tuy nhiên, có những lĩnh vực mà lập trình web C ++ với CppCMS trở nên rất hữu ích và hiệu quả, và một số nơi chỉ là lãng phí thời gian.

Khi CppCMS nên hoặc có thể được sử dụng?

1. Các trang web và ứng dụng tải cao với hàng trăm nghìn lượt truy cập mỗi giây, trong đó yêu cầu hiệu suất, hiệu quả và khả năng mở rộng cao.

2. Ứng dụng yêu cầu các công nghệ Comet / Server Push có thể mở rộng --- CppCMS có thể xử lý hiệu quả hàng trăm và hàng ngàn kết nối HTTP đồng thời với việc sử dụng tài nguyên tối thiểu.

Giao diện web 3.Embashing vào các ứng dụng / dịch vụ C ++ hiện có với một chi phí nhỏ của thư viện bổ sung.

4. Các thiết bị không đủ sức mạnh - CppCMS cho phép tạo ra các ứng dụng phong phú với chi phí phần cứng tương đối thấp sẽ hoạt động nhanh chóng hợp lý.

Khi nào không sử dụng?

Nếu bạn tạo các ứng dụng web nhỏ không yêu cầu tải cao và yêu cầu thời gian tiếp thị rất ngắn - có lẽ các công cụ như Django hoặc RoR sẽ phù hợp hơn cho các tác vụ như vậy.

Những nhược điểm cụ thể đối với C ++ là:

  • Thời gian biên dịch có thể rất rất rất rất rất chậm so với các ngôn ngữ khác. Điều này có thể ảnh hưởng đến các lần lặp, khoảng thời gian phát hành mà còn cả đạo đức của nhà phát triển. Hãy chắc chắn rằng nó có giá trị nó.
  • Hầu hết thời gian, bạn cần biên dịch các thay đổi. Nó có thể tránh được nhưng đó là chuyện bình thường.
  • Viết C ++ hiện đại giúp dễ dàng (tìm hiểu, đọc, viết, gỡ lỗi, v.v.), nhưng rất nhiều nhà phát triển C ++ không biết Modern C ++ là gì. Vì vậy, nếu bạn làm việc theo nhóm, bạn cần có kiến ​​thức tốt về Modern C ++ từ toàn đội. Nếu không, bạn sẽ dễ dàng mắc phải những lỗi rất phức tạp. Điều đó nói rằng, đó là một vấn đề con người hơn là một vấn đề ngôn ngữ. Chỉ là lịch sử C ++ không giúp dễ dàng nắm bắt. Dạy tốt không phổ biến như trong các ngôn ngữ hiện đại hơn (trong lịch sử).
  • Unicode vẫn còn được hỗ trợ bởi ngôn ngữ C ++ cốt lõi, khiến nó trở thành một nguồn đau đớn tiềm tàng. Chỉ cần sử dụng UTF-8 ở mọi nơi và một số thư viện (xem xét boost) để quản lý nó.
  • Tiêu chuẩn C ++ không biết thư viện là gì. Vì vậy, chúng tôi sử dụng các cách thông thường để quản lý chúng trên các trình biên dịch / linker / OS khác nhau. Đây có thể là một vấn đề nếu bạn bắt đầu nhận được mã đa nền tảng cần tải / hủy tải "một cách nhanh chóng" một số mô-đun.

Có lẽ hãy xem CPPCMS? Hoặc có thể wt nếu bạn muốn tạo một trang web kiểu GUI?

Cũng kiểm tra những câu hỏi sau:


3
Tôi hiểu rằng Facebook được lập trình bằng PHP, nhưng họ cũng đã xây dựng trình biên dịch riêng cho PHP trong C ++ cho Linux. Lý do chính khiến Facebook phát triển trình biên dịch là để giảm chi phí điện cho các máy chủ vận hành. Nó không thực sự tốc độ (nhanh hơn) nhưng thực tế là nó yêu cầu sử dụng CPU ít hơn cho mỗi yêu cầu. Đây là một dự án nguồn mở có thể được tìm thấy ở đây. developers.facebook.com/blog/post/2010/02/02/ Lời
Phản ứng

1
Vâng, lý do khác nhau, đó là lý do tại sao tôi đề cập đến chi phí năng lượng và máy chủ. Điều đó đang được nói, Alexandrescu đã nói gần đây trong một cuộc phỏng vấn, tôi tin rằng, ngày càng nhiều mã Facebook được viết trực tiếp bằng C ++, nhưng anh ấy đã không đề cập đến lý do tại sao, nếu trí nhớ của tôi là chính xác. Họ cũng cung cấp một thư viện mã nguồn mở với đầy đủ các thuật toán / tiện ích C ++: Folly facebook.com/notes/facebook-engineering/
Kẻ

Cũng lưu ý rằng ngay cả khi mã được viết lần đầu tiên bằng PHP sau đó được chuyển đổi thành C ++, 3 nhược điểm tôi đã chỉ ra vẫn đúng.
Klaim

2
Một khung web C ++ khác: wt (dí dỏm). Nó dành cho những người muốn xây dựng các ứng dụng web hoạt động như các ứng dụng trên máy tính để bàn. Đối với porting, đó là một lựa chọn tốt.
K.Steff

Tôi nghĩ rằng tất cả các trang web đó có các thành phần được viết bằng nhiều ngôn ngữ. C ++ rất có thể được sử dụng làm tối ưu hóa cho các phần mã yêu cầu quản lý bộ nhớ tinh chỉnh.
nhảy lên

3

Wordpress chạy trong PHP với một vài plugin được cài đặt sẽ đưa máy chủ Winders của tôi đến đầu gối. Vì vậy, tôi không có vấn đề gì với ý tưởng triển khai một ứng dụng web trong C ++. Tốc độ là một phần quan trọng của trải nghiệm web.

Lều thiết kế đồ họa để thúc đẩy phần lớn các dự án web. PHP là một ngôn ngữ kịch bản tối nghĩa chạy bên trong HTML. Cho phép các tác giả PHP thoát ra khỏi HTML. Kết quả là có nhiều lợi ích khi làm việc với HTML.

Tuy nhiên, bạn có thể triển khai bất kỳ số lượng giải pháp mẫu HTML nào trong C ++.

Người ta có thể cung cấp cho bạn một danh sách dài các khung công tác Python và PHP giúp phát triển nhanh chóng, nhưng nếu bạn có nhiều thời gian thì C ++ hoàn toàn có thể.

Điều tôi không hiểu là quyết định của bạn về C ++ trên Windows. cười lớn


1
Đối số người rơm cổ điển, có nhiều lựa chọn thay thế nhanh hơn cho wordpress / php không phải là C ++. Tôi không nói rằng C ++ không phải là một lựa chọn phù hợp, chỉ là đối số của bạn không thực sự đóng khung rất tốt.
Jimmy Hoffa

Tôi đồng ý với bạn. Tôi không nghĩ rằng tôi đã cố gắng để làm cho wordpress thay thế. Chỉ là trải nghiệm của tôi gần đây đã cho thấy rất khó để có được hiệu suất tốt từ các khung phổ biến.
Phản ứng

1
StackExchange chạy trên khung ASP.NET MVC. Node.js là trọng lượng thấp hiệu suất cao và nếu bạn thực sự muốn một cái gì đó ridiculously performant có Snap hoặc Yesod Haskell khung yesodweb.com/blog/2011/03/... , Haskell, JavaScript, và C # tất cả là mức cao thu gom rác ngôn ngữ.
Jimmy Hoffa

1
Lưu ý rằng tốc độ thực thi Mã trên máy chủ trong nhiều trường hợp không phải là yếu tố giới hạn trong ứng dụng web. Phần lớn thời gian được dành để chờ đợi một cái gì đó (cơ sở dữ liệu) hoặc thậm chí ở giao diện người dùng (tìm nạp CSS, hình ảnh, thực hiện JavaScript, kết xuất HTML)
johannes

1

Nó chắc chắn là một sự lựa chọn bất thường. C ++ không được thiết kế dành cho các ứng dụng web và trong khi các thư viện tồn tại để viết, giả sử, các ứng dụng FastCGI với C ++, bạn phải thực hiện nhiều công việc khác để đưa ứng dụng cơ bản của mình lên. "Ngôn ngữ web" thường làm rất nhiều thứ cho bạn mà bạn phải lấy từ nơi khác trong C ++, chẳng hạn như thực hiện giao thức HTTP, tạo HTML, v.v.

Ngoài ra, các ứng dụng web chủ yếu là về các chuỗi, không chính xác là mặt mạnh nhất của C ++ - không có loại chuỗi nào được tích hợp trong ngôn ngữ và điều này dẫn đến một vài điều kỳ quặc và khiến việc xử lý chuỗi trở nên vụng về hơn so với mức cao hơn ngôn ngữ cấp độ. Xử lý mã hóa ký tự chính xác trong viền C ++ trên ma thuật đen. Và C ++ có thể gặp sự cố rất lớn, với mã trông khá ngây thơ, rất ít khả năng với ngôn ngữ cấp cao hơn (chúng cũng có thể bị sập, nhưng trong hầu hết các trường hợp, máy chủ web có thể phục hồi một cách duyên dáng, đặc biệt là trên các nền tảng sử dụng một mô hình vòng đời -request, như PHP).

Điều đó nói rằng, nếu bạn đã có hầu hết các codebase được viết, C ++ vẫn có thể là một lựa chọn khả thi. Bạn sẽ cần tìm một số thư viện để bao gồm tất cả các loại web (đáng chú ý nhất là bạn muốn có thể tích hợp máy chủ web HTTP độc lập vào chương trình của mình hoặc nối vào, giả sử, thông qua FastCGI hoặc bằng cách biên dịch một mô-đun, bạn cũng sẽ muốn một số loại thư viện tạo khuôn mẫu để làm cho việc hiển thị các tài liệu HTML không gây đau đớn).

Cuối cùng, có vấn đề thị trường của nhà phát triển. Có rất nhiều nhà phát triển C ++ có sẵn và thậm chí nhiều nhà phát triển web hơn, nhưng sự trùng lặp có lẽ không lớn, vì vậy nếu bạn cần thuê người làm việc này, bạn sẽ có một khoảng thời gian khó khăn hơn so với, nói, PHP.


1

Như những người khác đã nói, về mặt khái niệm, C ++ là một môi trường tốt để phát triển máy chủ web. Tuy nhiên, có một số cân nhắc khi bạn đưa ra quyết định.

Sự phổ biến của các ngôn ngữ kịch bản cho thiết kế máy chủ web xoay quanh thời gian. Những thay đổi đơn giản có thể được thực hiện dễ dàng với việc chứng minh kết quả gần như ngay lập tức. Bạn sẽ thấy rằng bất kỳ thiết kế máy chủ web tốt sẽ cung cấp khả năng tương tự. Thật vậy, C ++ là một môi trường tuyệt vời để đạt được mục tiêu đó.

Chìa khóa để xây dựng một hệ thống ứng dụng máy chủ web tốt là tách giao diện người dùng khỏi mã. Mục tiêu trong việc xây dựng môi trường ứng dụng web là để tránh "UI của bạn nằm trong mã của tôi và mã của bạn nằm trong UI của tôi."

Tôi muốn cẩn thận tại các hệ thống như cppcms. Tôi hy vọng rằng nó cung cấp một cái gì đó tương tự.

Bạn không cần một ngôn ngữ kịch bản để cung cấp sự linh hoạt và hiệu suất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.