Phát triển web C ++: Muốn bắt đầu tối giản [đóng]


8

Tôi hiện đang làm việc với bằng Khoa học Máy tính và tôi muốn xây dựng thư viện Máy chủ Web của riêng mình. Vấn đề? Mọi tìm kiếm tôi đã thực hiện khi tương tác với các trang web đều chỉ đến "Sử dụng thư viện này do người khác xây dựng" - thay vì giải thích các vấn đề cơ bản về gửi và nhận thông tin.

Tôi không yêu cầu nhiều - Tôi chỉ muốn nhập một ký tự chữ và số trên một trang web, nhấn nút và có một byte thông tin được gửi đến chương trình C ++, mà không cần sự trợ giúp của một người không chuẩn thư viện.


3
Bạn đã xem xét apache (hoặc hầu hết các máy chủ web khác) và giao diện cổng chung chưa? Hoặc apache với một plugin c ++ ( hướng dẫn liên quan )?

Một đề xuất khác sẽ là Mongrel 2. Nó chỉ gửi các yêu cầu đến chương trình đích và nhận đầu ra thông qua các socket ZeroMQ.
Sẽ

Cũng có tăng ASIO nếu bạn thực sự muốn bắt đầu cấp thấp
Daniel Gratzer

Điều này thực sự nên được chuyển sang stackoverflow.com
ủng cao su

Câu trả lời:


6

Boost.Asio hiện đang được chuyển đổi thành (một trong?) Cách tiêu chuẩn C ++ trong tương lai để thực hiện kết nối mạng. (Đây là một trong những giấy tờ: http://www.open-std.org/jtc1/sc22/wg21/docs/ con / 2012 / n3388.pdf )

Đây thực sự là hệ thống giao tiếp không đồng bộ di động cơ bản nhất mà bạn sẽ tìm thấy bằng cách sử dụng C ++ hiện đại , vì nó trừu tượng hóa các thư viện ổ cắm hoặc nền tảng khác được cung cấp.

Tất cả các thư viện mạng C ++ http hiện đại ( CppNetlibCPPCMS ) đều dựa vào nó. Tôi khuyên bạn nên xây dựng thư viện của mình xung quanh nó cung cấp những điều cơ bản cho ổ cắm và sự đồng bộ (và đồng bộ) nhưng không thiết lập một hệ thống đầy đủ cho bạn. Có thể trong một vài năm, bạn thậm chí có thể thay thế Boost.ASIO bằng tiêu chuẩn C ++ tương đương.

Ngoài ra, tài liệu của Boost.Asio cung cấp cái nhìn sâu sắc về cách thức giao tiếp hoạt động trong loại bối cảnh này. Vì vậy, đọc nó có thể trả lời rất nhiều câu hỏi của bạn.

Và nếu bạn muốn hiểu cấp độ thấp hơn, hãy đọc mã Asio. Hơi khó đọc nếu bạn không quen với lập trình meta C ++ và các thành ngữ C ++ khác nhưng bạn sẽ học được rất nhiều bằng cách đọc nó.


2

Một số thông tin tye mà bạn muốn có ở đây - http://en.wikipedia.org/wiki/Common_Gateway_Interface . Nghe có vẻ không giống như những gì bạn đang cố gắng làm rất phức tạp, nhưng nó phức tạp hơn bạn nghĩ. Như Dominic đã nói phần khó khăn sẽ mở cổng và đọc từ ổ cắm - khá khó khăn trong vùng đất c ++.

Tôi khuyên bạn nên bắt đầu với, sử dụng một máy chủ web hiện có và viết mô-đun CGI của riêng bạn. Máy chủ web sẽ chăm sóc phía ổ cắm của mọi thứ và về cơ bản, bạn chỉ đọc dữ liệu từ các biến môi trường hoặc đối số dòng lệnh (nếu đó là yêu cầu GET) hoặc từ stdin nếu đó là POST (Tôi nghĩ, đây là dữ liệu từ trí nhớ của tôi khoảng 15 tuổi). Những gì bạn muốn là một cái gì đó như thế này:

#include <stdio.h>
#include <string.h>

int main(){
    char *s=getenv("CONTENT_LENGTH");
    int i=atoi(getenv("CONTENT_LENGTH"));
    printf("Content-type: text/html\n\n");
    printf("%s\n<br />",s); //Shows you CONTENT_LENGTH works
    printf("%d\n<br />",i); //Shows you it was converted to int
    char *tmp = new char[100];
    fread(tmp,i,1,stdin); //read from stdin something of i bytes to tmp
    printf("%s\n<br />",tmp);
    return 0;
}

BTW như một bài học cho người đọc ứng dụng này có lỗi tràn bộ đệm .. có lẽ bạn muốn sửa nó :)


1

Sửa lỗi cho tôi nếu tôi sai, nhưng có vẻ như bạn muốn lập trình máy chủ web của riêng mình từ đầu, chỉ sử dụng các thành phần C ++ tiêu chuẩn.

Trước hết, bạn có một chút ràng buộc vì không có thư viện ổ cắm tcp / ip tiêu chuẩn, vì vậy bạn sẽ cần sử dụng ổ cắm Windows hoặc ổ cắm Posix tùy thuộc vào nền tảng.

Sau đó, bạn sẽ cần nghiên cứu định dạng của yêu cầu / phản hồi. Tôi chắc chắn với một chút tìm kiếm, bạn sẽ tìm thấy một tài nguyên trên giao thức http.

Sau đó, bạn sẽ cần tạo một máy chủ lắng nghe các kết nối, trả lời các yêu cầu và gửi phản hồi.

Nếu đó không phải là những gì bạn đang hỏi, thì đề xuất của MichaelT nghe có vẻ hợp lý.

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.