2012-08-23 9 views
12

Tôi đang làm việc với GameKit.framework và tôi đang cố gắng tạo một thông tin đáng tin cậy giao tiếp giữa hai iPhone.Giao tiếp của GameKit có đáng tin cậy với GKMatchSendDataReliable không?

Tôi đang gửi các gói có chế độ GKMatchSendDataReliable.

Các tài liệu nói:

GKMatchSendDataReliable

Dữ liệu được gửi liên tục cho đến khi nó nhận được thành công bởi người nhận dự định hoặc thời gian kết nối ra. Truyền đáng tin cậy được gửi theo thứ tự chúng được gửi đi. Sử dụng điều này khi bạn cần đảm bảo giao hàng.

Có sẵn trong iOS 4.1 trở lên. Được khai báo trong GKMatch.h.

Tôi gặp phải một số sự cố về kết nối Wi-Fi kém. GameKit không khai báo kết nối bị mất, nhưng một số gói không bao giờ đến.

Tôi có thể tin tưởng vào giao tiếp đáng tin cậy 100% khi sử dụng GKMatchSendDataReliable hoặc Apple chỉ sử dụng tên lạ mắt cho một cái gì đó mà họ không triển khai không?

+0

Tôi chưa bao giờ sử dụng chế độ đáng tin cậy, nhưng tôi đã gặp phải nhiều sự cố khi thử nghiệm các ứng dụng GC trên trình mô phỏng. Đảm bảo bạn thử nghiệm ứng dụng của mình trên hai thiết bị. – Adam

Trả lời

1

Người dùng của tôi cũng phàn nàn rằng một số dữ liệu có thể vô tình bị mất trong trò chơi. Tôi đã viết một số test app và đã tìm ra rằng GKMatchSendDataReliable không thực sự đáng tin cậy. Khi kết nối internet yếu (ví dụ: EDGE), một số gói dữ liệu thường xuyên bị mất mà không có bất kỳ lỗi nào từ API của Trung tâm trò chơi.

Vì vậy, tùy chọn duy nhất là thêm lớp vận chuyển bổ sung để phân phối thực sự đáng tin cậy.

Tôi đã viết một lib đơn giản cho mục đích này: RoUTP. Nó lưu tất cả các tin nhắn đã gửi cho đến khi nhận được thông báo cho mỗi nhận được, gửi lại bị mất và bộ đệm nhận được tin nhắn trong trường hợp chuỗi bị hỏng. Trong thử nghiệm kết hợp của tôi "RoUTP + GKMatchSendDataUnreliable" hoạt động ngay cả beter hơn "RoUTP + GKMatchSendDataReliable" (và tất nhiên tốt hơn so với GKMatchSendDataReliable tinh khiết mà không thực sự đáng tin cậy).

+1

Tôi đã thu thập bằng chứng đồng ý với bạn. Tôi phải thừa nhận tôi ngạc nhiên bởi điều này, chưa kể đến rất thất vọng trong Apple. Tôi có nghĩa là nghiêm túc, kết nối đáng tin cậy của họ chỉ là blatantly không đáng tin cậy? Tôi phải thêm một lớp vận chuyển trên đầu trang của một lớp trò chơi mà ngồi trên đầu trang của nhiều lớp vận chuyển? Điều gì tiếp theo, chúng ta sẽ bắt đầu viết một số điều khiển luồng phần cứng trong ứng dụng? FFS. – theLastNightTrain

0

Nó gần 100% đáng tin cậy nhưng có thể không phải những gì bạn cần đôi khi… Ví dụ bạn bỏ mạng tất cả nội dung bạn gửi qua GKMatchSendDataReliable sẽ được gửi theo thứ tự bạn đã gửi. Điều này là tuyệt vời cho các trò chơi theo lượt, nhưng nếu phản ứng nhanh là cần thiết, bỏ qua mạng sẽ không chỉ quên các gói bị mất, anh ta sẽ nhận được tất cả các gói muộn cho đến khi anh ta trở lại thời gian thực.

Trường hợp GKMatchSendDataReliable không gửi dữ liệu là thời gian kết nối. Tôi nghĩ rằng đây cũng là trường hợp bạn đóng ứng dụng