Vì vậy, hãy nói rằng tôi đang viết một máy chủ web và tôi muốn hỗ trợ tải lên tệp "rất lớn". Cho phép giả định thêm rằng tôi muốn thực hiện điều này thông qua loại MIME/đa dữ liệu mẫu chuẩn. Tôi nên nói rằng tôi đang sử dụng erlang và tôi dự định thu thập các gói http khi chúng được trả lại từ erlang:decode_packet/2
, nhưng tôi không muốn thực sự thu thập yêu cầu cho đến khi trình xử lý yêu cầu http tìm thấy địa điểm tải lên. Tôi có nênLàm cách nào để xử lý các tệp tải lên rất lớn trong máy chủ web Erlang?
a) tiếp tục và thu thập dữ liệu của cơ thể, bỏ qua khả năng nó rất lớn và do đó có thể làm máy chủ bị trục trặc do hết bộ nhớ?
b) không tiếp nhận trên ổ cắm của bất kỳ cơ quan yêu cầu nào (có thể không tồn tại) cho đến sau khi tiêu đề đã được xử lý?
c) làm điều gì khác?
Ví dụ cho câu trả lời c có thể là: sinh ra một quy trình khác để thu thập và ghi nội dung đã tải lên tới vị trí tạm thời (để giảm thiểu sử dụng bộ nhớ), đồng thời đưa vị trí đó đến trình xử lý yêu cầu http để xử lý trong tương lai. Nhưng tôi không biết - có một kỹ thuật tiêu chuẩn ở đây không?
Vâng, sự đồng thuận dường như là cách tiêu chuẩn là làm những gì tôi đã đề xuất cho tùy chọn c. Tuy nhiên, tôi cảm thấy rằng phải có một cách tốt hơn - tôi bị làm phiền bởi sự lúng túng của các tệp tạm thời - chúng yêu cầu các cổng bổ sung mở ra (nhiều lần nếu tôi dự định đọc tệp vào một thời điểm nào đó) và chúng phân chia giữa hai hoặc nhiều quy trình mà tôi muốn được xử lý bởi một. Đây là, tuy nhiên, những gì tôi đã có kế hoạch để làm - Tôi muốn hopped rằng ai đó có thể làm việc theo một cách khác nhau. – Aoriste
Bạn cần lưu trữ dữ liệu. Thực tế điều này được thực hiện trong bộ nhớ hoặc trên thiết bị lưu trữ. Câu hỏi của bạn nói rằng bộ nhớ không phải là một lựa chọn; bình luận của bạn nói rằng bạn không thích lưu trữ nó trên một thiết bị. Lựa chọn duy nhất còn lại là huyền bí ... – Zed