Đây là một trích dẫn của Sam Jansen từ một bình luận trên gafferongames.com :
Nói như một nhà nghiên cứu mạng và không phải là nhà phát triển trò chơi, kết luận không bao giờ sử dụng TCP và UDP cùng nhau có vẻ hơi mạnh mẽ. TCP sẽ chỉ bị mất gói nếu nó đang gửi quá nhiều dữ liệu; theo một số cách giống như dữ liệu UDP bạn đang gửi. Sự khác biệt là bạn không có quyền kiểm soát trực tiếp về tốc độ TCP gửi, điều này được ẩn cho bạn.
Nếu bạn chỉ cần gửi một số dữ liệu đáng tin cậy và không muốn lo lắng về việc truyền lại và thực hiện một giao thức đáng tin cậy, và bạn biết rằng tốc độ sẽ thấp, thì sẽ không có vấn đề gì khi sử dụng cả TCP và UDP.
Mối quan hệ không quá phức tạp giữa hai người thực sự: TCP chỉ tăng tốc độ gửi của nó (nếu có dữ liệu để gửi) cho đến khi bị mất gói, trong trường hợp đó, nó quay lại tốc độ của nó, sau đó bắt đầu tăng lại tốc độ (điều này thời gian chậm hơn). Khi tốc độ tăng của nó gây ra mất gói, nó cũng có khả năng tấn công bất kỳ luồng dữ liệu nào khác, bao gồm cả các gói UDP của bạn.
Đặc điểm giấy của Mất gói UDP: Hiệu ứng của lưu lượng TCP có kết quả bằng cách mở nhiều kết nối TCP cùng một lúc và làm ngập dữ liệu mạng. Điều này dẫn đến tắc nghẽn sau đó là đồng bộ hóa toàn cầu , cả hai đều gây ra các gói bị rơi. Rõ ràng, một khách hàng trò chơi sẽ không mở hàng tá kết nối cùng một lúc và tràn ngập mạng với dữ liệu, và do đó kết quả của bạn sẽ khác.
Để trả lời câu hỏi của bạn:
Tôi tự hỏi liệu có hợp lý khi sử dụng cả TCP và UDP cùng một lúc không, nhưng đối với những thứ khác nhau [...]
Có, đây là một điều có thể chấp nhận được khi giả sử bạn ở trong giới hạn băng thông của mình.
- TCP để gửi thông tin được gửi không thường xuyên, nhưng nên được đảm bảo đến nơi đáng tin cậy. Chẳng hạn như cập nhật điểm số, tên người chơi hoặc thậm chí trạng thái bật / tắt của ánh sáng trong thế giới trò chơi.
Khi sử dụng cả TCP và UDP, bạn luôn muốn gửi càng nhiều càng tốt qua UDP và càng ít càng tốt qua TCP.
Bây giờ, tôi hỏi bạn điều này: Có thực sự cần thiết phải gửi điểm số, tên người chơi và trạng thái của ánh sáng qua TCP không? Mặc dù đúng là bạn cần nhận dữ liệu này sau cùng, nhưng có đúng là bạn cần nhận dữ liệu này theo đúng thứ tự và chính xác một lần không?
Chắc là không.
UDP hoạt động tốt trong những trường hợp này và Quake 3 là một ví dụ điển hình về cách thức.
Vì vậy, một ví dụ tốt về TCP cùng với UDP là gì? Chà, nghĩ về chatbox của một trò chơi. Các bản cập nhật cho hộp trò chuyện này (nghĩa là các dòng văn bản mới) cần phải được gửi một cách đáng tin cậy và theo thứ tự nghiêm ngặt. Do đó, TCP là một sự phù hợp tốt.