Tôi đang bắt đầu một dự án nhỏ, về cơ bản là phiên bản nhiều người chơi (trong hơn hai người chơi) của trò chơi Battleship cổ điển.Android P2P (kết nối trực tiếp) qua Internet (phía sau NAT)
Một vấn đề mà tôi đang cố giải quyết trước khi đi sâu vào viết mã là vấn đề giao tiếp giữa nhiều người chơi. Một khả năng hiện tại là sử dụng một máy chủ HTTP trung tâm làm trung tâm giao tiếp (cùng với API C2DM của Android để cho phép truyền thông đẩy từ máy chủ HTTP đến các thiết bị). Điều này có vẻ là một giải pháp tốt đẹp, bởi vì trong lý thuyết miễn là bạn có quyền truy cập vào Internet nó sẽ hoạt động hoàn hảo, cho dù bạn đang đứng sau NAT hay không.
Tuy nhiên, giải pháp được đề xuất có bất lợi của một điểm lỗi/tải bổ sung hiện tại (máy chủ web). Vì vậy, tôi muốn thử các tùy chọn khác. Tôi nghĩ đến việc tạo các kết nối trực tiếp bằng cách sử dụng Sockets giữa các máy khách (với máy chủ web chỉ được sử dụng như một điểm gặp gỡ ban đầu), tuy nhiên điều này sẽ chỉ hoạt động tốt nếu tất cả các thiết bị trong cùng một mạng. Xét rằng hôm nay chúng tôi hầu như luôn luôn đứng sau NAT của một bộ định tuyến như thế nào tôi có thể đạt được truyền thông trực tiếp? Tôi đã đọc về đấm lỗ nhưng tôi không thể tìm thấy bất kỳ thư viện tốt mà là tài liệu (có chứa các ví dụ tốt về sử dụng) và hoạt động trên Android cho chắc chắn. Ngoài ra hầu hết (nếu không phải tất cả) kỹ thuật đục lỗ (STUN, ICE, vv ...) chỉ có sẵn với UDP, điều này là tốt cho các trò chơi nhiều người chơi âm thanh/video và thời gian thực có thể mất một số tin nhắn. dựa trên trò chơi điều quan trọng là đảm bảo việc cung cấp dữ liệu của mỗi lượt (một cái gì đó mà nó không thể trực tiếp với UDP).
Vì vậy, bất kỳ ý tưởng nào về cách đạt được lỗ đục lỗ đáng tin cậy (tốt nhất là trên TCP) giữa các thiết bị Android phía sau NAT? Nó không phải làm việc trên 100% các trường hợp (một số NAT lạ có thể không được hỗ trợ) nhưng nó sẽ là tốt đẹp nếu nó làm việc trên hầu hết các trường hợp.
Giải pháp được trình bày bởi Win Myo Htet có tiềm năng tốt đẹp (nó sử dụng cơ sở hạ tầng của riêng Google). Tuy nhiên, tôi vẫn quan tâm đến một giải pháp tốt cho việc đục lỗ TCP và/hoặc UDP trên Android. – petersaints
bạn đã làm gì với @petersaints? – kishu27