2010-11-14 36 views
9

Tôi đang viết một ứng dụng mà phía máy khách sẽ tải dữ liệu lên máy chủ thông qua liên kết không dây.TCP vs UDP đáng tin cậy

Kết nối phải rất đáng tin cậy.Các liên kết dự kiến ​​sẽ phá vỡ nhiều lần và sẽ có nhiều khách hàng kết nối với máy chủ.

Tôi đang bối rối về việc sử dụng TCP hoặc UDP đáng tin cậy.

Hãy chia sẻ suy nghĩ của bạn.

Cảm ơn.

+2

Bạn cũng có thể quan tâm đến việc kiểm tra câu hỏi này: [Bạn sử dụng gì khi bạn cần UDP đáng tin cậy?] (Http://stackoverflow.com/questions/107668/what-do-you-use-when-you -need-trusted-udp) –

Trả lời

6

RUDP không phải là, tất nhiên, một tiêu chuẩn chính thức, và không có thông báo nếu bạn sẽ tìm thấy hiện thực hiện có bạn có thể sử dụng. Với một sự lựa chọn giữa việc lăn này từ đầu và chỉ cần tạo lại các kết nối TCP, tôi đã chọn TCP.

4

Để an toàn, tôi sẽ đi với TCP chỉ vì đó là giao thức chuẩn, đáng tin cậy. RUDP có bất lợi không phải là một tiêu chuẩn được thiết lập (mặc dù nó được đề cập trong một số cuộc thảo luận của IETF).

Chúc bạn may mắn với dự án của mình!

0

Nếu bạn không chắc chắn, tỷ lệ cược là bạn nên sử dụng TCP. Đối với một điều, nó chắc chắn là một phần của ngăn xếp mạng cho bất cứ điều gì hỗ trợ IP. "UDP đáng tin cậy" hiếm khi được hỗ trợ ra khỏi hộp, vì vậy bạn sẽ có thêm một số công việc hỗ trợ cho khách hàng của mình.

3

Có khả năng cả hai liên kết TCP và RUDP của bạn sẽ bị phá vỡ bởi môi trường của bạn, vì vậy thực tế là bạn đang sử dụng RUDP sẽ không giúp được điều đó; có thể sẽ có lúc không có gói dữ liệu nào có thể vượt qua được ...

Điều bạn thực sự cần đảm bảo là a) bạn có thể xử lý số lượng khách hàng được kết nối, b) giao thức ứng dụng của bạn có thể phát hiện một cách hợp lý một cách nhanh chóng khi bạn đã mất kết nối với một máy khách (hoặc máy chủ) và c) bạn có thể xử lý việc kết nối lại cần thiết và duy trì trạng thái phiên kết nối chéo cho các máy khách.

Miễn là bạn đối phó với b) và c) nó không thực sự quan trọng nếu kết nối tiếp tục bị hỏng. Hãy chắc chắn rằng bạn thiết kế giao thức ứng dụng của bạn để bạn có thể hoàn thành công việc theo các đợt ngắn; vì vậy nếu bạn đang tải lên các tệp, hãy đảm bảo rằng bạn đang gửi các khối nhỏ và giao thức ứng dụng có thể tiếp tục chuyển giao đã bị hỏng một nửa; bạn không muốn nhận 99% số tiền thông qua chuyển 2gb và mất kết nối và phải bắt đầu lại.

Để làm việc này, máy chủ của bạn cần một loại bộ nhớ cache trạng thái phiên khách hàng, nơi bạn có thể giữ trạng thái logic của kết nối của khách hàng vượt quá vòng đời của kết nối. Thiết kế từ đầu để mong đợi một phiên nhất định để bao gồm nhiều kết nối riêng biệt. Trạng thái phiên có thể có một số loại thời gian chờ vì vậy nếu khách hàng biến mất trong thời gian nó không tiếp tục tiêu thụ tài nguyên trên máy chủ nhưng, thành thật mà nói, nó có thể chỉ đơn giản là một trường hợp lưu trạng thái ra khỏi đĩa sau một lúc.

Tóm lại, tôi không nghĩ rằng sự lựa chọn của các vấn đề vận chuyển và tôi muốn đi với TCP ít nhất là để bắt đầu. Điều thực sự quan trọng là có thể quản lý trạng thái phiên của máy khách trên máy chủ và xử lý thực tế là các máy khách sẽ kết nối và ngắt kết nối thường xuyên.

Các vấn đề liên quan