Làm thế nào tôi có thể mô phỏng một kết nối internet xấu cho mục đích thử nghiệm?


105

Tôi đang phát triển một trò chơi trực tuyến nhiều người chơi. Nó hoạt động tốt khi tôi kiểm tra nó trên mạng cục bộ, nhưng trước khi phát hành, tôi muốn kiểm tra trải nghiệm người dùng hoạt động như thế nào đối với người không có kết nối tốt với máy chủ. Làm cách nào tôi có thể mô phỏng kết nối internet xấu với độ trễ cao, băng thông thấp, jitter và mất gói thỉnh thoảng khi ở trong môi trường cục bộ?


69
Gửi cho tôi để thử nghiệm! Các kết nối ở đất nước của tôi là khủng khiếp theo mặc định.
Stephan

7
Một mục tiêu đáng khen ngợi. Tôi muốn các hãng phim được xuất bản sẽ làm như vậy. Epic Games, tôi đang nhìn bạn.
Gusdor

7
Tìm một người bạn gần đó sử dụng Comcast ...
WernerCD

12
Mô phỏng một kết nối internet xấu chứa các câu trả lời hiện tại và nhiều hơn nữa.
MichaelHouse

2
Tôi nghĩ ngay đến câu hỏi SE gần đây này: superuser.com/questions/637594/ Khăn
Patrick M

Câu trả lời:


63

Tôi nghĩ Dummynet là những gì bạn đang tìm kiếm. Dummynet là một công cụ mô phỏng mạng có thể mô phỏng các giới hạn băng thông, độ trễ, mất gói và nhiều thứ khác. Bạn có thể dễ dàng chọn lưu lượng truy cập nào bạn muốn chặn và định cấu hình các giới hạn, ví dụ: để giới hạn tất cả lưu lượng TCP đến ở mức 2Mbit / giây bạn làm

ipfw add pipe 2 in proto tcp
ipfw pipe 2 config bw 2Mbit/s

Bạn thấy lựa chọn lưu lượng được thực hiện bởi tường lửa ipfw đã biết và các đường ống cung cấp các tính năng giới hạn.

Nó có sẵn cho FreeBSD, Linux và Windows.


Nó có hoạt động với bộ điều hợp loopback của Windows không?
Andriy Tylychko

để trả lời câu hỏi của riêng tôi, không, nó không hoạt động với tôi trên Windows 8.1, ngay cả sau khi tôi vô hiệu hóa trình tăng cường trình điều khiển đã ký
Andriy Tylychko

@AndyT Bạn có tìm thấy cái gì đó hoạt động với loopback không? Tìm một cái gì đó mà packloss VÀ hoạt động với loopback có vẻ khó khăn.
AaronLS

@AaronLS: vui lòng xem câu trả lời khác tại đây: gamedev.stackexchange.com/a/100779/4731
Andriy Tylychko

33

Điều hòa mạng

Nếu bạn đang sử dụng máy Mac, bạn có thể sử dụng Điều hòa liên kết mạng.

Ngăn điều hòa liên kết mạng

Bạn có thể mô phỏng nhiều trường hợp kết nối internet xấu khác nhau, bao gồm cả Edge và 3G.

Ngoài ra, bạn có thể tạo hồ sơ của riêng bạn với các cài đặt của riêng bạn:

Cấu hình tùy chỉnh điều hòa mạng

Đây là bản tải xuống miễn phí trong Xcode (đi tới Xcode → Mở Công cụ dành cho nhà phát triển → Thêm công cụ dành cho nhà phát triển khác và tải xuống Công cụ IO phần cứng cho Xcode ).


Tôi thích công cụ này, nhưng tôi cần một cái gì đó mà tôi có thể sử dụng để kiểm tra tự động. Có ai biết nếu có một giao diện dòng lệnh cho việc này?
Erik B

15

Nếu bạn đang dùng linux, bạn có thể sử dụng netem để mô phỏng tất cả các sự cố có thể xảy ra với mạng như độ trễ cao, băng thông thấp, mất gói và nhiều vấn đề khác.

Có một tùy chọn cho các cửa sổ được gọi là NetLimiter nhưng tôi chưa sử dụng nó nên không thể đảm bảo.

Chỉ cần tìm thấy một ứng dụng Mac có tên SlowlyApp .


1
-1 Như với các câu trả lời khác. Đây chỉ là liên kết. Vui lòng cập nhật câu trả lời để bao gồm các mô tả về những gì ứng dụng làm và cách chúng thực hiện.
MichaelHouse

8
@ Byte56: Những gì các ứng dụng này làm là mô phỏng kết nối mạng chậm và / hoặc không đáng tin cậy, giống như câu hỏi yêu cầu. Tôi khá chắc chắn làm thế nào họ làm điều đó nằm ngoài phạm vi của trang web này. Tôi muốn nói rằng đây là một câu trả lời hoàn toàn tốt cho câu hỏi khi được hỏi; nếu có một vấn đề, đó là trong câu hỏi, không phải trong câu trả lời.
Ilmari Karonen

1
Về mặt kỹ thuật, câu hỏi đặt ra "Làm thế nào tôi có thể mô phỏng kết nối internet xấu". Nó không yêu cầu các ứng dụng để làm điều đó. Nhưng vâng, tôi nghĩ rằng câu hỏi này nằm ngoài phạm vi của trang web này.
MichaelHouse


7

Làm cách nào tôi có thể mô phỏng kết nối internet xấu với độ trễ cao, băng thông thấp, jitter và mất gói thỉnh thoảng khi ở trong môi trường cục bộ?

Nếu bạn đang ở trên Windows, bạn có thể dùng thử Trình mô phỏng kết nối SoftPerinf . Về cơ bản, nó là trình điều khiển tự tiêm giữa ứng dụng của bạn và lớp mạng (tương tự Wireshark / WinPCAP) cho NIC đã chọn và có thể mô phỏng băng thông hạn chế, độ trễ, mất gói và những thứ khác. Giao diện người dùng đơn giản và dễ hiểu.

Đây là một sản phẩm thương mại, nhưng bản dùng thử cho phép bạn thực hiện các đợt "can thiệp" 30 giây đủ tốt để bạn đánh giá liệu công cụ này có làm những gì bạn muốn hay không.

Một tùy chọn đa nền tảng khác là DummyNet , hoạt động theo cách tương tự (thông qua ipfw) nhưng ít dễ sử dụng hơn một chút.

Tôi muốn kiểm tra trải nghiệm người dùng hoạt động như thế nào đối với người không có kết nối tốt đến máy chủ.

Tôi nghĩ phần này của câu hỏi có thể được trình bày lại là "làm thế nào để tôi xử lý độ trễ mạng trong ứng dụng của mình?" Một kỹ thuật thường được sử dụng và hiệu quả là Dead Reckaming . Bài viết được liên kết giải thích nó tốt hơn tôi có thể, nhưng ý tưởng cơ bản là khách hàng của bạn loại "mô phỏng" nơi mỗi thực thể nên và những gì nó nên được thực hiện bằng thuật toán. Bất cứ khi nào một thực thể đi chệch khỏi thuật toán này (tức là đầu vào của người chơi, sự kiện phía máy chủ, v.v.), nó sẽ gửi một bản cập nhật cho mỗi máy khách.


5

Tôi đã không sử dụng nó trong một thời gian, nhưng tôi đã sử dụng Charles để thử nghiệm điều này. Đây là một ứng dụng với nhiều công cụ chẩn đoán mạng khác nhau, bao gồm mô phỏng các vấn đề bạn đã đề cập: "kết nối internet kém với độ trễ cao, băng thông thấp, jitter và mất gói thỉnh thoảng"


1
Từ cái nhìn đầu tiên, có vẻ như Charles là một loại proxy HTTP, do đó, nó không thể định hình lưu lượng TCP hoặc UDP đơn giản. Tui bỏ lỡ điều gì vậy?
vbo

và nó thậm chí còn có +5, wft?
Mary Paździoch

Tôi không chắc chắn "hình thành lưu lượng TCP hoặc UDP đơn giản" nghĩa là gì, nhưng tôi đã sử dụng công cụ này cho chính xác những gì OP đã hỏi, mô phỏng kết nối internet xấu.
jhocking

1
@jhocking Ông có nghĩa là nó chỉ hoạt động cho lưu lượng HTTP. Nhiều trò chơi thời gian thực sử dụng TCP hoặc UDP.
AaronLS

0

Nếu bạn hiểu biết về Fiddler và bạn chỉ quan tâm đến HTTP / 1 thì bạn có thể viết kịch bản này.

Fiddler không hỗ trợ HTTP / 2, việc chặn nó sẽ khiến tất cả lưu lượng HTTP hạ cấp xuống HTTP / 1.


Hấp dẫn. Bạn có thể cung cấp chi tiết hơn? Có thể một số ví dụ kịch bản?
Phi

@Philipp Câu trả lời này ( stackoverflow.com/a/47401557/442351 ) đưa ra một ví dụ.
BanksySan

Nó chỉ hỗ trợ http? Thậm chí không có websockets? Sau đó, tôi không nghĩ rằng nó có nhiều sử dụng trong phát triển trò chơi. Nếu bạn lo lắng về độ trễ thì bạn sẽ không sử dụng http ở nơi đầu tiên. Nhưng dù sao cũng cảm ơn vì đã đề cập đến nó.
Phi

@Philipp nó không hỗ trợ WebSockets, chỉ cần HTTP / 2 nóng. Mặc dù vậy, bạn nên xem HTTP / 2, không có gì giống như HTTP / 1, không còn chặn đầu dòng, không có nhiều cái bắt tay, không có thêm tiêu đề và / hoặc cookie trùng lặp.
BanksySan
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.