Nếu tôi muốn trực tiếp nói rằng UDP là nhanh hơn, tương đối so với TCP mà nó được sử dụng cho các ứng dụng đó; bạn sẽ không tin và chấp nhận. Các nhà phát triển, thực hiện điều này, do đó phát triển một số độ tin cậy trên UDP (được gọi là RUDP) để làm cho nó phần nào bắt chước TCP. Tuy nhiên, nó không thực hiện hoàn toàn chức năng TCP (tính tổng thể).
Đó là lý do tôi muốn trả lời câu hỏi của bạn có sự tham khảo một bài báo Reliable UDP (RUDP): The Next Big Streaming Protocol?
:
TCP có một bộ các hướng dẫn đảm bảo rằng mỗi gói dữ liệu được cho người nhận nó. Nó có thể so sánh với phân phối được ghi lại ở dạng cơ bản nhất của nó. Tuy nhiên, trong khi nó có vẻ hiển nhiên lúc đầu rằng "làm cho chắc chắn thông điệp được có" là tối thượng khi gửi một cái gì đó để người khác, có một vài cân nhắc thêm phải được lưu ý. Nếu liên kết mạng sử dụng TCP/IP thông báo rằng gói đã xuất hiện của chuỗi, sau đó TCP dừng truyền, hủy mọi thứ từ gói ngoài chuỗi, gửi "quay lại nơi nó bị lỗi "tin nhắn, và bắt đầu truyền lại.
Nếu bạn có tất cả thời gian trên thế giới, điều này là tốt. Vì vậy, để chuyển thông tin tiền lương của tôi từ công ty của tôi cho tôi, tôi thẳng thắn không quan tâm nếu điều này mất một micro giây hoặc một giờ, tôi muốn nó thực hiện đúng. TCP là tuyệt vời cho điều đó.
Trong một mô hình dịch vụ video-trung tâm, tuy nhiên, có chỉ đơn giản là quá nhiều dữ liệu mà nếu một vài gói tin không làm cho nó qua liên kết có tình huống mà tôi thà bỏ những gói dữ liệu và tiếp tục với dòng chảy tổng thể của video hơn là lấy mọi chi tiết của nguồn gốc gốc. Não của chúng ta có thể tưởng tượng các bit bị bỏ qua của video cho chúng tôi là miễn là nó không bị phân tâm bởi âm thanh và video dừng chuyển động. Trong các trường hợp này, có tùy chọn chỉ gửi nhiều dữ liệu từ một đầu của liên kết đến liên kết khác một cách kịp thời, bất kể mức độ chính xác bao nhiêu, rõ ràng là mong muốn. Ứng dụng này dành cho loại ứng dụng này là UDP tối ưu. Nếu một gói dường như không có đến, thì người nhận sẽ đợi một lát để xem liệu nó có đến - có khả năng đến thời điểm người xem cần xem khối video đó - và nếu bộ đệm nhận được đến mức gói bị thiếu, sau đó nó đơn giản tiếp tục, và ứng dụng bỏ qua điểm mà dữ liệu bị thiếu, chuyển sang gói tiếp theo và duy trì thời gian của video. Bạn có thể thấy nhấp nháy hoặc một số tạo tác, nhưng thời điểm trôi qua gần như ngay lập tức và nhiều khả năng não của bạn sẽ lấp đầy khoảng trống.
Nếu lỗi này xảy ra dưới TCP thì có thể mất TCP upward of 3 seconds để thương lượng lại chuỗi khởi động lại từ điểm thiếu , loại bỏ tất cả dữ liệu tiếp theo, phải được gửi lại . Chỉ một gói bị mất có thể khiến toàn bộ "cửa sổ" của dữ liệu TCP được gửi lại.
Nhiều nhà phát triển trò chơi chọn một làm cho UDP đáng tin cậy trong việc áp dụng mức . Đó không phải là những gì TCP được tạo ra?
Nếu bạn có thể chịu đựng được tốc độ dữ liệu đang được xử lý ở cả hai đầu thì OK.
Nhưng, trong trò chơi, điều này không ổn. Bạn phải vượt qua các khung hình video (và âm thanh, vv.) Nhiều lần trong một giây mà quá nhiều người chơi (nếu nhiều người chơi). Tất cả đều cần tốc độ nhanh hơn và khả năng xử lý dữ liệu nhanh hơn; thay vì sử dụng TCP tương đối chậm hơn. Ngay cả khi một số gói dữ liệu bị ngắt giữa chừng, thì ứng dụng cũng có thể di chuyển ON, vì bộ não cũng sẽ chuyển sang phần tiếp theo thay vì nghĩ về những jitters đó.
Tôi đã tạo API cho phép giao tiếp Client-Server bằng UDP và gói TCP. Tôi có nên thêm UDP đáng tin cậy vào danh sách không? Và tại sao? Có sự cố nếu tôi sử dụng TCP không?
Điều đó phụ thuộc vào cách bạn muốn ứng dụng phản hồi tốt hơn. Tôi muốn đề nghị bạn thêm UDP đáng tin cậy vào danh sách của bạn.
Tôi đã đề cập vấn đề với TCP.
Tôi chỉ muốn biết nếu RUDP có bất kỳ lợi ích nào trên TCP, để tôi có thể chọn có thêm hỗ trợ RUDP hay không.
Với chi phí thấp và tốc độ cao hơn, tôi đặt cược cho UDP đáng tin cậy, so với TCP cồng kềnh - để phát triển các ứng dụng như vậy (chơi game).
Tôi chỉ muốn biết nếu RUDP có bất kỳ lợi ích nào trên TCP, để tôi có thể chọn có thêm hỗ trợ RUDP hay không. – None
Ohhhhh Tôi hoàn toàn hiểu lầm cơ thể của câu hỏi của bạn. Tôi không thấy _ "làm cho UDP ** đáng tin cậy ở cấp ứng dụng **" _. Tôi nghĩ rằng đây là một câu hỏi TCP vs UDP, xin lỗi của tôi người bạn của tôi – MickyD
Không có vấn đề gì cả. – None