2010-01-16 43 views
5

Đối với học kỳ này ở trường đại học, chúng ta phải viết các trò chơi nối mạng (trong java) theo nhóm 4. Tôi đã tình nguyện làm việc trên mã mạng cho nhóm của mình.Sự khác biệt giữa DatagramSocket và DatagramChannel

Đọc lên trên mạng java, có vẻ như có hai phương pháp UDP của mạng:

http://java.sun.com/j2se/1.4.2/docs/api/java/net/DatagramSocket.html Đây là một tiêu chuẩn tìm kiếm socket UDP, có thể gửi gói tin đến bất kỳ địa chỉ IP của bất kỳ cảng.

http://java.sun.com/j2se/1.4.2/docs/api/java/nio/channels/DatagramChannel.html Đây là một số loại hệ thống kênh, được xây dựng trên đỉnh ổ cắm udp. Tôi không hoàn toàn chắc chắn những gì nó cung cấp, ngoại trừ khả năng chỉ kết nối với một khách hàng, mà không phải là rất hữu ích trong trường hợp này.

Đây có phải là các tùy chọn duy nhất không? Cách nào tốt nhất để sử dụng cho trò chơi nhiều người chơi trong thời gian thực với 4-8 người chơi?

+0

tôi muốn biết câu trả lời thực tế của câu hỏi ... có ai giúp không? – Amos

Trả lời

5

Bạn không hỏi câu hỏi đầu tiên trước. Câu hỏi đầu tiên là: kỷ luật nhắn tin nào phù hợp nhất cho trò chơi này?

Đối với một số ít người dùng, UDP hoàn toàn gặp nhiều rắc rối hơn đáng kể. Bạn phải lo lắng về các gói bị mất, bạn phải tìm ra cách để gói dữ liệu thành các gói nhỏ, yada, yada, yada.

Ở tỷ lệ 4-8 người chơi, bạn có thể kết nối với dịch vụ web và gửi thông báo xà phòng xung quanh. Điều đó sẽ chăm sóc tất cả các dữ liệu serialization cho bạn. Heck, bạn thậm chí có thể sử dụng JMS.

Đối với câu hỏi theo nghĩa đen của bạn, kênh là một phần của nio. Họ hỗ trợ ghép kênh, mà Sockets thì không. Nếu bạn cần hỏi 'có gói nào cho tôi trên bất kỳ cổng nào trong số những cổng này không?' bạn muốn kênh. Nếu không có chúng, bạn cần một thread-per-port. Giả sử, tất nhiên, bạn có nhiều hơn một cổng mà bạn đang nhận dữ liệu.

+1

Trò chơi là thời gian thực, tôi không nghĩ rằng các dịch vụ web thực sự sẽ phù hợp với điều đó đúng không? – Martin

+1

SOAP là một giao thức đồng bộ Giảm một khối thông điệp SOAP chờ phản hồi) để chơi trò chơi trong thời gian thực có thể có vấn đề trong môi trường mạng có độ trễ cao. –

+0

Đó là bài tập ở trường với quy mô nhỏ. – bmargulies

1

Thiết kế của bạn có bao gồm máy chủ trung tâm hay là ứng dụng khách-khách không? Điều đó có thể ảnh hưởng đến kỹ thuật nào phù hợp với các dấu phẩy.

Bạn có được phép sử dụng thư viện của bên thứ ba không? Nếu vậy, tôi luôn tìm thấy JGroups rất tốt để thực hiện việc phát đa hướng đáng tin cậy. Thật dễ dàng để tìm hiểu và cấu hình cao. (Có hay không nó phù hợp hiệu suất cho một trò chơi thời gian thực tôi không chắc chắn, nhưng tôi đã sử dụng nó trong quá khứ để đẩy xung quanh rất nhiều dữ liệu và không bao giờ có một vấn đề hiệu suất.)

+0

Tôi không chắc chắn loại thư viện nào chúng tôi được phép sử dụng. Tôi sẽ phải hỏi cố vấn của tôi, nhưng nếu chúng tôi được cho phép thì nó trông giống như một thư viện tuyệt vời. – Martin

1

Trò chơi là thời gian thực, tôi không nghĩ rằng các dịch vụ web thực sự sẽ phù hợp với điều đó đúng không?

Có thể, nhưng thời gian thực chơi game là có vấn đề không có vấn đề gì trên internet công nghệ sử dụng:

  • Nếu bạn muốn hỗ trợ người chơi ở phía bên kia của hành tinh, bạn sẽ phải đối phó với mạng độ trễ của thứ tự từ 1/2 giây trở lên.

  • Nếu bạn muốn hỗ trợ người chơi trong quận tiếp theo, bạn sẽ cần phải đối phó với thỉnh thoảng "đóng băng" do tổn thất gói do tắc nghẽn mạng, vv

  • Nếu bạn muốn hỗ trợ lớn số lượng người chơi, sau đó bạn phải đối phó với việc mở rộng quy mô, cả việc sử dụng tài nguyên cục bộ và băng thông mạng.

Vì vậy, trong khi lựa chọn vận tải mạng là quan trọng, nó chỉ là một phần của sự cố. Nó có lẽ là quan trọng hơn để thiết kế các giao thức cấp ứng dụng (game) để giảm thiểu tác động của độ trễ mạng và đóng băng/tổn thất gói tin về "trải nghiệm người chơi". Hoặc chỉ giới hạn trò chơi để sử dụng trên mạng LAN.

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