Cách mô phỏng kết nối internet chậm trên máy mac


145

Giải pháp phần mềm tốt để làm chậm kết nối internet trên máy Mac để thử nghiệm và mô phỏng là gì?

Nhu cầu chính của tôi là khi kiểm tra mã trong trình giả lập iPhone / iOS, do đó, việc chậm kết nối cho các ứng dụng hoặc quy trình cụ thể sẽ rất tuyệt vời.


Tôi đã tìm thấy câu trả lời được chấp nhận (Network Link conditioner) cũng là một cách giải quyết nhanh chóng và bẩn thỉu tuyệt vời cho các vấn đề về bộ đệm.
Robert Tupelo-Schneck

Câu trả lời:


168

Apple đã tạo ra một công cụ chính thức rất tiện dụng để làm chậm các kết nối mạng trên máy Mac của bạn cho mục đích thử nghiệm.

Các Liên kết Mạng Xả sở thích là một tải về miễn phí từ bên trong Xcode (đối với Lion và sau đó hệ điều hành). Ngoài ra, iOS có chức năng tương tự có thể truy cập từ trong Xcode và iOS 6 trở lên.

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

Các phiên bản Xcode cũ hơn trước phiên bản 4.3.2 đã nhúng một bản sao của công cụ này. Bây giờ, bạn sử dụng Xcode để tải xuống trực tiếp theo cách tương tự với tài liệu giả lập và phát triển iOS.

Có 11 cấu hình được xây dựng từ mạng Lossy Edge với độ trễ 400ms đến modem cáp. Nếu bạn cần các giới hạn khác, bạn có thể tạo hồ sơ tùy chỉnh với cài đặt của riêng mình hoặc bạn cũng có thể sử dụng ipfwchính mình như được mô tả trong bài viết của Craig Hockenberry , làm cho nó dễ dàng. Nó cũng đề cập đến bảng điều khiển Giới hạn tốc độ của Mike Schrag là một bản tải xuống nhỏ hơn hơn Xcode, nhưng có ít tùy chọn hơn công cụ của Apple.

Nó làm chậm toàn bộ ngăn xếp mạng, do đó bạn không thể điều tiết trên cơ sở từng ứng dụng mà không thực hiện các thao tác như cài đặt sư tử trong máy ảo và đặt VM đó với ngăn xếp được điều chỉnh.


1
: OI thậm chí còn có Xcode và không biết về điều này
Alexander

21
Hãy chắc chắn tắt nó sau khi bạn thử nghiệm xong!
Jason Salaz

1
Làm rõ: bạn thực sự phải tải xuống các công cụ IO phần cứng từ Apple. Xem Cài đặt Công cụ điều hòa liên kết mạng Táo
daviesgeek

2
Giới hạn tốc độ được đề cập dưới đây hoạt động xuất sắc . Tôi hiện đang sử dụng nó cho localhost: 8888 trên MAMP.
Anriëtte Myburgh

1
Cũng lưu ý rằng iOS 6 có bộ điều hòa liên kết mạng để thử nghiệm trên thiết bị. Truy cập thông qua Cài đặt-> Nhà phát triển trong phần "Điều hòa liên kết mạng".
Mike Weller

35

OS X 10.9 trở về trước cung cấp ipfwvà nó cho phép bạn xác định các quy tắc tường lửa tùy chỉnh. Tạo một đường ống với băng thông hạn chế bằng cách sử dụng ipfwvà bạn có thể chạy thử nghiệm và mô phỏng.

  1. Tạo một đường ống "1" giới hạn ở 500KBytes / s thông qua

    sudo ipfw pipe 1 config bw 500KByte/s
    
  2. Hướng dẫn tất cả lưu lượng mạng của cổng 80 qua đường ống "1" bằng cách sử dụng

    sudo ipfw add 1 pipe 1 src-port 80
    
  3. Khi bạn không cần đường ống nữa, hãy tháo nó ra khỏi cổng bằng cách sử dụng

    sudo ipfw delete 1
    

Khác

  • Nếu bạn muốn đặt rào cản lưu lượng truy cập cao hơn, bạn có thể sử dụng MByte/s
  • Cổng 80: cổng tiêu chuẩn cho httplưu lượng không được mã hóa . Cổng này được sử dụng cho hầu hết các trình duyệt và tải xuống. Bạn sẽ ổn với điều này trong hầu hết các trường hợp.
  • Cổng 443: cổng tiêu chuẩn cho httpslưu lượng được mã hóa SSL .

10
thật không may, ipfw đã bị xóa trong OS X 10.10 Yosemite
igo

Bạn có thể sử dụng pfctl để tăng tốc băng thông trên OS X 10.10+ - spin.atomicobject.com/2016/01/05/ Kẻ
Eugene A

Tôi đã thêm một câu trả lời dưới đây cho thấy pfctldnctlsử dụng ví dụ.
ubershmekel

31

Giới hạn tốc độ là ngăn Tùy chọn hệ thống để làm chậm có chủ ý và có chọn lọc làm chậm các cổng và miền cụ thể.


Tôi thích rằng nó chi tiết hơn công cụ XCode được đề cập trong câu trả lời được chấp nhận. Cám ơn vì sự gợi ý.
sholsinger

1
Thực sự, tôi thấy rằng "localhost" không hoạt động, chuyển sang địa chỉ ip 127.0.0.1 đã thực hiện thủ thuật này.
OlliM

4
SpeedLimit không hoạt động kể từ OS X 10.10 do công cụ tường lửa mà nó sử dụng đã bị xóa: github.com/mschrag/speedlimit/issues/13
Robin

Liên kết đến Giới hạn tốc độ bị hỏng.
Jeff Holt

Nguồn đến Giới hạn tốc độ dường như không được duy trì ngay bây giờ, nhưng có sẵn ở đây và có một bản cập nhật mới hơn ở đây mặc dù tôi chưa thử nghiệm tất cả
Brad

11

Để thêm vào câu trả lời được chấp nhận: có vẻ như bạn không cần XCode, chỉ cần một tài khoản tại trang web của Nhà phát triển Apple (đơn giản hơn lần đầu tiên tải xuống gói XCode 2GB nếu bạn chưa có nó).

Truy cập https://developer.apple.com/doads và tìm kiếm "Điều hòa liên kết mạng" hoặc "Công cụ bổ sung cho XCode", sau này là tên của gói được tìm thấy trong đó.

Để tải xuống qua Xcode 8.x:

  • Nhấp vào menu Xcode
  • Chuyển đến Công cụ dành cho nhà phát triển mở> Công cụ dành cho nhà phát triển khác ...
  • Điều này sẽ mở một trang tại developer.apple.com (Lưu ý: bạn có thể cần phải đăng nhập trước)
  • Nhấp vào dấu '+' bên cạnh Công cụ bổ sung cho Xcode 8.x
  • Nhấp vào URL tải xuống

2
Chào mừng bạn đến hỏi khác nhau! Thay vì viết câu trả lời để chỉnh sửa câu trả lời của người khác, chỉ cần nhấp vào chỉnh sửa hoặc cải thiện nút trả lời này bên dưới bài đăng mà bạn muốn cải thiện .
grg

9

Nếu bạn chỉ cần điều chỉnh để phát triển Web, tôi hoàn toàn có thể giới thiệu Charles . Dù sao, đây là một công cụ tuyệt vời để gỡ lỗi các ứng dụng HTTP và trong số nhiều tính năng của nó, nó có tùy chọn Thr Thr. Phần mềm này không rẻ, nhưng nó làm rất tốt.


Tôi thực sự cần nó cho trình giả lập iPhone .. và thử nghiệm các kết nối đến máy chủ
aneuryzm

5

Người dùng Mac OS X 10.10+ cần sử dụng dnctlvà các pfctlví dụ sử dụng được ghi lại không dễ tìm thấy.

# Configure `pfctl` to use `customRule`. 
(cat /etc/pf.conf && echo "dummynet-anchor \"customRule\"" && echo "anchor \"customRule\"") | sudo pfctl -f -

# Define `customRule` to pipe traffic to `pipe 1`.
# Note this is the actual port definition, not a textual comment
echo "dummynet in quick proto tcp from any to any port 443 pipe 1" | sudo pfctl -a customRule -f -

# Define what `pipe 1` should do to traffic
sudo dnctl pipe 1 config delay 10000
sudo dnctl pipe 1 config bw 10Kbit/s

# DO NOT FORGET to undo these when you're done
sudo dnctl -q flush
sudo pfctl -f /etc/pf.conf

Nếu bạn muốn đi ra ngoài và định hình mọi thứ bạn có thể sử dụng:

echo "dummynet in quick proto tcp from any to any pipe 1" | sudo pfctl -a customRule -f -

Tôi tin rằng điều này cũng ảnh hưởng đến các đường ống localhost làm chậm quá trình gỡ lỗi vs-code của tôi, vì vậy hãy chú ý đến điều đó.


4

Bạn cũng có thể sử dụng đường ống ipfw để làm chậm mạng của mình.

Đầu tiên, thiết lập một "đường ống" ảo để giới hạn thông lượng ở mức 800KBit / giây:

ipfw pipe 1 config bw 800Kbit

Sau đó, bạn có thể thiết lập quy tắc để đẩy lưu lượng qua ống đó (ống 1). (cổng 6881-6890 là lưu lượng bittorrent)

ipfw add 10 pipe 1 tcp from any to me 6881-6890
ipfw add 11 pipe 1 tcp from any 6881-6890 to me

Dưới đây là một ví dụ khác để giới hạn lưu lượng xuống còn 10Kbit / giây từ một địa chỉ IP cụ thể:

ipfw pipe 2 config bw 10Kbit
ipfw add 15 pipe 2 ip from me to 64.81.84.114

(Nguồn)


ipfw đã bị xóa trong OSX 10.10
Ben Wheeler

-1

Đối với XCode 10.2, trong Công cụ dành cho nhà phát triển khác - Công cụ bổ sung cho XCode 10.2, bạn sẽ tìm thấy Điều hòa liên kết mạng.


Giải pháp này khác với câu trả lời đã được cung cấp như thế nào?
Nimesh Neema

Tôi đã tải nhầm các công cụ Phần cứng ngay cả khi đó là phiên bản XCode cũ, tôi nghĩ rằng nó sẽ hoạt động vì tôi chưa thấy nó cho phiên bản mới hơn. Không có nơi nào viết rằng đối với XCode 10.2 mới, tôi phải chọn Công cụ bổ sung để có được bộ điều hòa liên kết mạng mới nhất. Điều đó được đề cập ở đây để các nhà phát triển khác không lãng phí thời gian của họ. Nếu bạn thấy nó không khác gì những người khác, hãy trừ đi mười lăm lần. Tôi đã làm điều đó để người khác nhận được sự giúp đỡ từ nó bằng cách tìm kiếm XCode mới 10.2
Kiran Jasvanee

Nó thực sự sẽ giúp bất cứ ai đọc câu trả lời này nếu bạn có thể chỉnh sửa câu trả lời của mình và bao gồm thông tin quan trọng này. Ngoài ra, nhiều người dùng thấy rằng việc viết rõ ràng và hướng dẫn từng bước thực sự có giá trị.
Nimesh Neema

@NimeshNeema Tôi nghĩ rằng tất cả các nhà phát triển đều biết trong cộng đồng rằng bạn có thể tìm thấy công cụ này thông qua các công cụ dành cho nhà phát triển khác. Tôi đã viết các bước. Tôi không nghĩ vì vậy tôi nên đề cập chi tiết hơn.
Kiran Jasvanee

Điều đó hoàn toàn tốt và tùy thuộc vào cách bạn chọn viết câu trả lời. Nhắc đến thường chỉ tuân theo thực hành chứ không phải là một quy tắc :)
Nimesh Neema
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.