Làm thế nào để huỷ response khi response quá giới hạn đặt ra?

chào a/c trên DNH. Theo em biết là browser gửi request tới server và server sẽ phản hồi lại response (Tải xuống response ). Vậy em đang sài data 4G đang muốn tiết kiệm bandwidth , Làm thế nào đễ mỗi response tải xuống quá giới hạn đặt ra (1MB , 500KB.v.v.v) thì hủy response đó ?

Em đang dùng nodejs , liệu có cách nào đặt giới hạn response trả về không? Ví dụ

axios.get("http://localhost:5050/get-key",{
  limit : '1MB'
}).catch(function(){
  console.log(`response too large`)
})

Em xin cảm ơn !

Theo mình biết thì không thể tính trước được dung lượng response, phải chờ server response data xong thì client mới biết tổng dung lượng response đó.

3 Likes

Nếu bạn có thể lấy được luồng trả về (response stream), hãy đọc nội dung đầu (header), trong đó chứa thuộc tính Content-Length chứa kích thước dữ liệu trả về. Nhưng các thư viện có sẵn đã đã bao trùm việc xử lý toàn bộ nội dung xong xuôi (đã tải về hết).

8 Likes

Ko thể tính đc dung lượng nhưng chắc chắn phải tải xuống. ví dụ mình tải tốc độ 50kb/s và mình đặt giới hạn là 500kb thì khi đạt ngưỡng 500kb thì mình hủy nó đi. Giống như tải file trên trình duyệt á bạn , Ko muốn tải nữa thì hủy , vấn đề mình ko biết làm sao ở nodejs

1 Like

Ý bạn là như này phải không:
Ban đầu server kết nối với cient có IP: 123.123.1.1, tổng bandwidth server response là 0kB.
Dự kiến server có 100 response ≈ 100kB (1kB mỗi response) sắp gửi, nhưng do IP 123.123.1.1 bị limit chỉ được gửi 20kB thôi, nên response thứ 21 đến 100 bị hủy :thinking:

1 Like

Ko phải đâu bạn chỉ 1 repsonse duy nhất mà thôi

File JSON là file văn bản thô, nó không phải là dữ liệu dạng stream, cho nên không có việc tải nửa chừng thì ngưng, ngưng thì sẽ không xài được, file bị đứt gãy -> vô nghĩa.

Ở đây, ta buộc phải tải hoàn tất nội dung JSON trả về, không thể tải 1/2 hoặc 1/N được. Nếu nguồn cung cấp có vài tùy chọn như: cho phép tải nhiều file JSON nhỏ thay vì 1 file to thì ta tải lần lượt từng file nhỏ, và cộng dung lượng khi tải về đến N mà ta đặt trước thì ngưng.

Nếu nguồn cấp JSON chỉ có file kích thước lớn thì ta không làm cách nào được nếu đang dùng cái giao thức liên quan HTML5 (hay gọi là web API) chạy trên trình duyệt.

JavaScript chạy trên môi trường NodeJS trên server (lúc này server đóng vai client mà không phải trình duyệt người dùng, người dùng lúc này là “ông lập trình backend”) thì được, lúc này nên dùng JavaScript phối hợp với ngôn ngữ lập trình mạnh trên server như Python, C++ hoặc Java để gửi tín hiệu tới thăm dò độ dài trong HEADER của giao thức HTTP rồi xử lý. Nhưng vẫn KHÔNG chắc server có tiết lộ Content-Length (trong HEADER hay không) và cũng KHÔNG THỂ 100% tải có thể tải kiểu resume như của phần mềm Internet Download Manager được nếu server nguồn JSON không hỗ trợ.

Chủ topic chỉ có thể dùng thời gian, nếu một request mà response trả về > N giây (mình đoán là dùng setInteval) mà dữ liệu chưa về đủ thì… ngắt.

Tóm lại: JavaScript chạy trên trình duyệt là mo mặt, không giải quyết được bài toán này. Cố gắng lắm thì thử nghiên cứu mấy cái như này https://github.com/jimmywarting/StreamSaver.js/tree/master

8 Likes

Bác này giống vs ý kiến của mềnh …

1 Like

Nếu đợi tải xuống hết rồi mới biết content length thì ko phải đáp án mình mong đợi , cái mình cần là giới hạn . Ví dụ data 4g còn 1MB , và nội dung trả về là 1,5MB dù muốn hay không chắc chắn vẫn phải tải xuống 1MB và nhà mạng ngắt kết nối. Kết quả mình ko nhận đc gì nhưng chắc chắn server đã nhận đc request và phản hồi

Vậy thì bạn mua thêm cái router lắp ở nhà, hoặc lắp trước server (server thuê có làm được không thì mình không biết)
CLIENT <=====> ROUTER <=====> SERVER
Router có chức năng giới hạn dung lượng thiết bị client trong mạng LAN trong nhóm chức năng QoS. Đạt giới hạn dung lượng chỉ định thì ngắt router đóng kết nối (router có firmware là linux nên chắc có phần mềm để filter từng request). Mình mới học xong mạng máy tính nên chém gió vậy :smile:

4 Likes

Mặc dù mình không rành nodejs, nhưng cũng tò mò search, thấy người ta hình như làm được mà? https://stackoverflow.com/questions/15636095/how-to-limit-response-length-with-http-request-in-node-js

5 Likes

đọc kĩ yêu cầu của bạn chủ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?