2009-08-31 43 views
12

Sau khi đọc cuốn sách của Joe Armstrong và xem các chương trình phát sóng của Kevin Smith, tôi đã xây dựng một ứng dụng OTP đơn giản bao gồm một gen_server đơn và giám sát viên duy nhất, đi kèm với nhau như một ứng dụng OTP.Khi sử dụng gen_server trong các ứng dụng Erlang/OTP

Bây giờ tôi đang xem mochiweb và đã tạo một dự án mẫu [helloworld] bằng cách sử dụng tập lệnh new_mochiweb.erl. Duyệt mã nguồn Tôi thấy nó không giống với ứng dụng OTP mẫu của tôi [ứng dụng OTP ở đó, người giám sát ở đó] với một khác biệt chính .. helloworld.erl được tạo ra và các tệp helloworld_web.erl không thực hiện hành vi gen_server, chúng chỉ là mô-đun Erlang chuẩn.

Tôi đã theo ấn tượng rằng việc sử dụng gen_server là cách được khuyến nghị để sử dụng khi xây dựng các thành phần ứng dụng OTP. Tại sao mochiweb có thể sử dụng ứng dụng OTP và các hành vi của người giám sát nhưng tránh được gen_server?

Trả lời

4

Có một gen_server, được gọi là mochiweb_socket_server. Các mô-đun được tạo ra chỉ là "mô-đun gọi lại" cho gen_server được gọi khi nhận được yêu cầu đến.

10

Bạn sử dụng OTP/gen_servers cho các quá trình đang trong chiến lược khởi động lại - đó là khởi động lại của chúng nằm trong kiểm soát của bạn.

Đó không phải là trường hợp với quy trình biểu thị kết nối với trình duyệt web. Nếu quá trình đó chết thì không có cách nào để máy chủ khởi động lại nó - do đó chạy nó dưới OTP là vô nghĩa.

Mochiweb (và Yaws) đều sử dụng bộ gen_servers để liên kết với cổng nghe và sau đó sinh ra một quá trình không giám sát để xử lý một kết nối mới.

+3

Ứng dụng stdlib là ứng dụng OTP. Khi bắt đầu, nó không có bất kỳ bộ phận nào đang chạy. Đó là một ứng dụng thư viện đơn giản, có cho các mô-đun nó tải, vì vậy các ứng dụng OTP khác có thể phụ thuộc vào nó để có được tất cả các mô-đun của nó. Vì vậy, vẫn còn có lý do để sử dụng OTP khi một người chỉ giới thiệu các mô-đun. – Christian

+0

Quyền của bạn, tôi đã được một chút slapdash trong ngôn ngữ của tôi ... Bạn nên gói tất cả các mã của bạn lên theo cách OTP bình thường bằng cách sử dụng các thư mục và các công cụ - nhưng đôi khi điều phải làm là chỉ sinh ra một cái gì đó thay vì sử dụng một gen_server để bắt đầu nó. –

Các vấn đề liên quan