Mô phỏng kết nối Internet chậm


188

Tôi biết đây là một câu hỏi kỳ lạ. Vì tôi thường phát triển các ứng dụng dựa trên "giả định" rằng tất cả người dùng có kết nối internet chậm. Nhưng, có ai nghĩ rằng có một cách để lập trình mô phỏng kết nối internet chậm, vì vậy tôi có thể "xem" cách một ứng dụng hoạt động dưới nhiều "tốc độ kết nối" khác nhau không?

Tôi không lo lắng về ngôn ngữ nào được sử dụng. Và tôi không tìm kiếm các mẫu mã hay bất cứ thứ gì, chỉ quan tâm đến logic đằng sau nó.

Câu trả lời:


109

Nếu bạn đang chạy windows, fiddler là một công cụ tuyệt vời. Nó có một cài đặt để mô phỏng tốc độ modem và đối với người muốn kiểm soát nhiều hơn có plugin để thêm độ trễ cho mỗi yêu cầu .

Tôi thích sử dụng một công cụ như thế này để đưa mã độ trễ vào ứng dụng của mình vì nó là một mô phỏng thực tế hơn nhiều, cũng như không khiến tôi thiết kế hoặc mã hóa các bit thực tế. Mã tốt nhất là mã tôi không phải viết.

THÊM : Bài viết này tại blog của Pavel Donchev trên Công nghệ phần mềm cho thấy cách tạo tốc độ mô phỏng tùy chỉnh: Hạn chế tốc độ kết nối Internet của bạn với Fiddler .


6
Xin chào, tôi đã viết một hướng dẫn nhỏ về mô phỏng kết nối internet chậm có thể hữu ích: Developertipoftheday.com/2010/12/ - tiết lộ đầy đủ - đây là blog của riêng tôi, nhưng chỉ trong trường hợp nó giúp tôi lan truyền từ hay của fiddler :-)
Alex KeySmith

Rắc rối với cách tiếp cận fiddler này là mô phỏng độ trễ không chính xác, nó hoạt động ở cấp độ giao thức sai, do đó bạn không thể mô phỏng đúng cách khởi động chậm.
Sam Saffron

@SamSaffron, Xin lỗi vì đã đào một bài viết cũ như thế này, nhưng, bạn có biết công cụ nào khác giúp mô phỏng khởi động chậm không?
Anish Ramaswamy

@AquerRam đặt cược tốt nhất là sử dụng dummynet / ipfw vận chuyển với bsd và gia đình, freebsd, osx vv barkingiguana.com/2009/12/04/ Lỗi
Sam Saffron

@AquerRam Cũng xem netem linuxfoundation.org/collabISE/workgroups/networking/netem có thể mô phỏng một loạt các điều kiện bằng cách sử dụng iproute2.
Philip Rieck

154

Bắt đầu với Chrome 38, bạn có thể thực hiện việc này mà không cần bất kỳ plugin nào. Chỉ cần nhấp vào kiểm tra phần tử (hoặc F12phím nóng), sau đó nhấp vào "chuyển đổi thiết bị mod" nhập mô tả hình ảnh ở đâyvà bạn sẽ thấy một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Trong số nhiều tính năng khác, nó cho phép bạn mô phỏng kết nối internet cụ thể (3G, GPRS)

PS cho những người cố gắng hạn chế tốc độ tải lên. Đáng buồn ở thời điểm hiện tại là không thể.

PS2 bây giờ bạn không cần phải bất cứ điều gì ẩn hiện. Bảng điều khiển có sẵn ngay từ bảng điều khiển mạng.nhập mô tả hình ảnh ở đây

Lưu ý rằng trong khi nhấp vào Không điều chỉnh, bạn có thể tạo các tùy chọn điều chỉnh tùy chỉnh.

nhập mô tả hình ảnh ở đây


2
Bây giờ, Chrome Dev Tools điều chỉnh giới hạn cả tốc độ tải xuống và tải lên. Nhưng nó chỉ giới hạn nó cho trang hiện tại trong Chrome, vì vậy bạn không thể sử dụng nó để kiểm tra trang của mình trong các trình duyệt khác. Để làm được điều đó, bạn cần sử dụng các công cụ khác như Fiddler.
Leonid Vasilev

3
Điều đáng nói là hiện tại WebSockets không được điều chỉnh theo cách này: bug.chromium.org/p/chromium/issues/detail?id=423246
mseddon

Tải lên điều chỉnh đã không hoạt động trong một vài phiên bản Chrome bao gồm cả phiên bản mới nhất (70.0). Có một báo cáo lỗi trên trình theo dõi .
Matt

Theo kinh nghiệm của tôi, nguyên nhân lớn nhất của sự chậm trễ web là DNS không ổn định của ISP cáp không thể giải quyết các máy chủ quảng cáo hoặc CDN. Đôi khi toàn bộ trang vẫn trống cho đến khi nỗ lực giải quyết chúng thành công hoặc hết thời gian. Chrome có thể mô phỏng điều này không?
StackOverthrow

45

Google khuyến nghị :


1
Điều hòa liên kết mạng được Apple duy trì (vì vậy nó ổn định và đáng tin cậy), NHƯNG nó chỉ áp dụng cho trình giả lập Xcode.
Ben Wheeler

4
@BenWheeler Đã thử nó gần đây, nó chắc chắn đã được áp dụng trên toàn hệ thống, thậm chí localhost
aromero

2
Tôi có thể xác nhận rằng Network Link conditioner thực sự được áp dụng cho toàn bộ ngăn xếp mạng.
Fred Vollmer

14

Trên máy Linux, bạn có thể sử dụng wondershaper

apt-get install wondershaper

$ sudo wondershaper {interface} {down} {up}

{down} và {up} là băng thông tính bằng kpbs

Vì vậy, ví dụ nếu bạn muốn giới hạn băng thông của giao diện eth1 ở mức 256kbps đường lên và đường xuống 128kbps,

$ sudo wondershaper eth1 256 128

Để xóa giới hạn,

$ sudo wondershaper clear eth1 

13

Tôi đã sử dụng http://www.netlimiter.com/ và nó hoạt động rất tốt. Không chỉ giới hạn tốc độ cho các quy trình đơn lẻ mà còn hiển thị tốc độ truyền thực tế.


Hầu hết các công cụ khác cung cấp kiểm soát băng thông thông qua độ trễ nhân tạo dường như không xảy ra với netlimiter, đây là một điều tốt. Tuy nhiên, cuối cùng, nó là một công cụ thương mại (với phiên bản dùng thử) và chỉ có sẵn trong Windows.
Aleksander Stelmaczonek

6

Có các proxy TCP ngoài kia, như iprelay và Sloppy, tạo hình băng thông để mô phỏng các kết nối chậm. Bạn cũng có thể định hình băng thông và mô phỏng mất gói bằng các công cụ lọc IP như ipfw và iptables.


Cảm ơn bạn, tôi sẽ có một cái nhìn vào iprelay và Sloppy joe.

Cảm ơn, ipfw hoạt động tuyệt vời. Đây là một hướng dẫn nhanh mà tôi thấy rất hữu ích: barkingiguana.com/2009/12/04/ Kẻ
Eric Nguyễn

4

Bạn có thể thử Dummynet , nó có thể mô phỏng giới hạn hàng đợi và băng thông, độ trễ, mất gói và hiệu ứng đa đường


4

Sử dụng proxy gỡ lỗi web với các tính năng điều chỉnh, như Charles hoặc Fiddler .

Bạn sẽ thấy chúng phát triển web hữu ích nói chung. Sự khác biệt chính là Charles là phần mềm chia sẻ, trong khi Fiddler là miễn phí.


Bạn chạy nó như một proxy. Trình duyệt tự động kết nối với nó và nó chuyển tiếp yêu cầu đến ứng dụng web của bạn.
Ben M

Đối với Fiddler, nó có cả hai chế độ để hoạt động bên trong / bên ngoài trình duyệt.
Ken D

4

Ngoài ra, để mô phỏng kết nối chậm trên một số * nixes, bạn có thể thử sử dụng ipfw . Thông tin thêm được cung cấp bởi câu trả lời của Ben Newman về câu hỏi Quora này


2

Sử dụng một công cụ như TCPMon . Nó có thể giả mạo một kết nối chậm.

Về cơ bản, bạn yêu cầu nó chính xác điều tương tự và nó chỉ chuyển tiếp cùng một yêu cầu chính xác đến máy chủ thực, và sau đó trì hoãn phản hồi chỉ với số lượng byte được đặt.


2

Bạn có thể sử dụng NetEm (Mô phỏng mạng) làm máy chủ proxy để mô phỏng nhiều đặc điểm mạng (tốc độ, độ trễ, mất gói, v.v.). Nó kiểm soát mạng bằng gói iproute2 và nó được kích hoạt trong kernel của hầu hết các bản phân phối Linux.

Nó được điều khiển bởi tcứng dụng dòng lệnh (từ gói iproute2 ), nhưng cũng có một số GUI giao diện web cho NetEm, ví dụ PHPnetemGUI2 .

Ưu điểm là, như tôi đã viết, nó có thể mô phỏng không chỉ các tốc độ mạng khác nhau mà còn, ví dụ, mất gói, trùng lặp và / hoặc tham nhũng, độ trễ ngẫu nhiên hoặc xác định, v.v., do đó bạn có thể mô phỏng các mạng hoạt động kém khác nhau.

Đối với ứng dụng của bạn, nó hoàn toàn minh bạch, bạn có thể định cấu hình hệ điều hành để sử dụng máy chủ proxy NetEm, vì vậy tất cả các kết nối từ máy đó sẽ đi qua NetEm. Hoặc bạn chỉ có thể định cấu hình ứng dụng của mình để sử dụng nó làm proxy.

Tôi đã sử dụng nó để kiểm tra hiệu suất của một ứng dụng Android trên các mạng hiệu suất kém được mô phỏng khác nhau.


1

Mac OSX kể từ 10.10 có một ứng dụng có tên Murus Firewall , hoạt động như một GUI cho pf, thay thế cho ipfw.

Nó hoạt động rất tốt cho điều tiết toàn hệ thống hoặc tên miền cụ thể. Tôi chỉ có thể sử dụng nó để trượt tốc độ tải xuống của mình trong khoảng từ 300Kbps đến 30Mbps để kiểm tra cách trình phát video trực tuyến điều chỉnh.


0

Ngoài ra còn có một công cụ khác gọi là WIPFW - http://wipfw.sourceforge.net/

Đó là một trường học hơi cũ, nhưng bạn có thể sử dụng nó để mô phỏng một kết nối chậm hơn. Nó dựa trên Windows và công cụ cho phép người quản trị giám sát lượng lưu lượng mà bộ định tuyến nhận được từ một máy nhất định hoặc lưu lượng truy cập WWW mà nó đang chuyển tiếp, chẳng hạn.


0

Cập nhật điều này (9 năm sau khi được hỏi) là câu trả lời tôi đang tìm kiếm không được đề cập:

Firefox cũng có các cài đặt trước cho tốc độ kết nối tiết kiệm. Tìm chúng trong tab Network Monitor của các công cụ dành cho nhà phát triển. Mặc định là 'Không điều chỉnh'.

Chậm nhất là GPRS ( Tốc độ tải xuống: 50 Kb / giây, Tốc độ tải lên: 20 Kb / giây, Độ trễ tối thiểu (ms): 500 ), từ 'tốt' và 'thông thường' 2G, 3G và 4G sang DSL và WiFi ( Tốc độ tải xuống: 30Mb / giây, Tải lên tốc độ: 15Mbps, độ trễ tối thiểu (ms): 2 ).

Thêm trong tài liệu Dev Tools .


0

Đối với Linux, danh sách các bài báo sau đây có thể hữu ích:

Cá nhân, trong khi Dummynet là tốt, tôi thấy NetEm là linh hoạt nhất cho các trường hợp sử dụng của tôi; Tôi thường quan tâm đến ảnh hưởng của độ trễ, thay vì băng thông (tức là sự cố kết nối WiFi) và rất dễ giả lập mất / hỏng gói ngẫu nhiên, v.v. Nó cũng rất dễ truy cập và miễn phí (không giống như Linktropy dựa trên phần cứng ).

Bên cạnh đó, đối với Windows, Clumsy thật tuyệt vời. Tôi cũng muốn thêm rằng điều chỉnh trình duyệt (liên quan đến trang web) không phải là một phương pháp chính xác để mô phỏng các sự cố mạng thực tế (tôi nghĩ rằng "TKK" đã nhận xét về một số lý do tại sao ở trên).

Hy vọng điều này sẽ giúp được ai đó!


0

Một trường hợp phổ biến của việc định hình một kết nối TCP thực sự có thể được lắp ráp từ các cặp kép socatcpipetheo kiểu UNIX như sau:

socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'

Điều này mô phỏng một kết nối có băng thông khoảng 300kB / giây từ dịch vụ của bạn tại :5000đến khoảng 10kB / giây và lắng nghe :5555các kết nối đến. Hãy cẩn thận : Lưu ý rằng mỗi kết nối này , vì vậy mỗi kết nối TCP riêng lẻ sẽ nhận được số tiền này.

Giải thích: Bên ngoài (trái) socat lắng nghe với các tùy chọn đã cho trên :5555như một máy chủ giả mạo. Lệnh đầu tiên cpipetrong SYSTEM:...tùy chọn sau đó điều chỉnh dữ liệu đi vào ổ cắm: 5555 (và xuất phát từ đầu tiên, bên ngoài socat) tối đa 10kByte / s. Dữ liệu đó sau đó được chuyển tiếp bằng cách sử dụng dữ liệu khác socatkết nối tới localhost:5000(nơi dịch vụ bạn muốn làm chậm nên lắng nghe). Dữ liệu từ localhost:5000 sau đó được đưa vào cpipelệnh bên phải , mà (với các giá trị đã cho) điều chỉnh nó tới khoảng 300kB / s.

Các tùy chọn -ngrđể cpipelà quan trọng. Nó khiến cpipe đọc không tham lam từ bộ mô tả tệp đầu vào của nó. Nếu không, bạn có thể bị kẹt với dữ liệu trong bộ đệm không được chuyển tiếp và chờ trả lời.

Sử dụng buffercông cụ phổ biến hơn thay vì cpipecó khả năng là tốt.

(Tín dụng: Điều này dựa trên công thức "cú đúp" của Barshe Loor từ socattài liệu)

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.