2013-09-08 27 views
6

Tôi cần triển khai trình nhắn tin tức thì của khách hàng/máy chủ bằng cách sử dụng các ổ cắm thuần túy trong Java lang.
Máy chủ sẽ phục vụ số lượng lớn khách hàng và tôi cần quyết định nên sử dụng ổ cắm nào - TCP hoặc UDP.
Cảm ơn, Costa.Điều gì là tốt hơn cho tin nhắn tức thời TCP hoặc UDP?

+0

Nó phụ thuộc vào những gì req của bạn uirements là.Yêu cầu duy nhất bạn đưa ra cho chúng tôi, "số lượng lớn khách hàng" về cơ bản là vô nghĩa bởi vì chúng tôi không biết liệu bạn có coi 800 khách hàng là "số lượng lớn" hay 16.000 không. –

+0

Nó có thể là hàng chục ngàn khách hàng trong cùng một thời điểm – Wizit

Trả lời

7

TCP

Lý do:

TCP: "Có đảm bảo tuyệt đối rằng các dữ liệu chuyển vẫn còn nguyên vẹn và đến theo đúng thứ tự trong đó nó đã được gửi"

UDP: "Không có gì đảm bảo rằng các thư hoặc gói được gửi sẽ tiếp cận."

Tìm hiểu thêm tại: http://www.diffen.com/difference/TCP_vs_UDP

Bạn có muốn nhắn chat của bạn có thể bị mất?

Chỉnh sửa: Tôi đã bỏ lỡ phần "chương trình trò chuyện lớn". Tôi nghĩ vì bản chất của chương trình trò chuyện nó cần phải là một máy chủ TCP, tôi không thể tưởng tượng được nội dung văn bản thực tế được gửi bởi người dùng qua giao thức UDP.

Giới hạn tối đa cho máy chủ TCP là 65536 kết nối cùng một lúc. Nếu bạn thực sự cần phải vượt qua con số đó, bạn có thể tạo một máy chủ điều phối để gửi kết nối đến máy chủ phù hợp tùy thuộc vào tải máy chủ hiện tại.

+0

Thực ra tôi không muốn tin nhắn sẽ bị mất nhưng có bất kỳ giới hạn nào về ổ cắm mà máy chủ có thể tạo không? Theo tôi hiểu TCP sẽ mở socket cho mọi máy khách TCP được kết nối. – Wizit

+0

Tôi sẽ không quan tâm đến giới hạn tải trên máy chủ của bạn trừ khi bạn có kế hoạch triển khai chương trình trò chuyện cực kỳ lớn. Giới hạn tối đa trên máy chủ TCP là 65536 kết nối. Và có bạn phải có một kết nối mở cho mọi khách hàng. –

1

Tùy thuộc vào việc người dùng có cần phải biết liệu các tin nhắn đã được gửi đến máy chủ hay chưa. Các gói UDP không có sự thừa nhận vốn có. Nếu khách hàng gửi một tin nhắn IM đến máy chủ và nó bị mất trong quá cảnh, không phải là khách hàng hoặc máy chủ sẽ biết về nó.

(Câu trả lời ngắn gọn là "sử dụng giao thức TCP" ... nhưng nó là đáng suy nghĩ thông qua những tác động thiết kế cho chính mình.)

1

TCP sẽ cung cấp cho bạn độ tin cậy, đó là chắc chắn mong muốn khi trong tin nhắn tức thời - bạn sẽ không muốn tin nhắn bị xóa trong suốt quá trình chuyển đổi.

Tuy nhiên, nếu bạn có ý định sử dụng nhắn tin nhóm, thì bạn có thể sẽ sử dụng mulitcast. Đối với những trường hợp như vậy, UDP sẽ là chioce đúng vì UDP có thể xử lý điểm đến đa điểm. Việc sử dụng TCP cho các ứng dụng multicast sẽ khó khăn kể từ bây giờ người gửi sẽ phải theo dõi các truyền lại/tỷ lệ gửi cho nhiều người nhận. Một giải pháp thay thế có thể là sử dụng TCP cho trò chuyện điểm-điểm và sử dụng UDP để nhắn tin nhóm.

4

Bạn có thể sử dụng cả hai. Sử dụng TCP để trao đổi các thông điệp thực tế, (vì vậy không có dữ liệu nào bị mất và truyền tải các thông báo lớn, (ví dụ như chứa jpegs, vv), chỉ có thể sử dụng UDP để gửi các thông điệp ngắn 'connectNow' đến các máy khách có các thông điệp được xếp hàng đợi. có thể có các trạng thái như (NotLoggedIn, TCPconnected, TCPdisconnected, LoggedOut) với các timeout khác nhau để kiểm soát các trạng thái chuyển tiếp cũng như các sự kiện trao đổi thông báo thông thường. 'TCPconnected', nơi chúng sẽ ở lại, trao đổi tin nhắn, cho đến khi một số timer không hoạt động hướng dẫn client ngắt kết nối ngay bây giờ, tất nhiên, không đáng tin cậy và vì vậy bạn có thể lặp lại thông điệp 'connectNow' mỗi X giây cho N lần Khách hàng nên, trong mọi trường hợp, hãy thử một cuộc thăm dò mỗi X phút, chỉ trong trường hợp ...

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