Tôi đã tạo một vài thử nghiệm:Điều gì xảy ra với kết nối TCP và UDP (với đa hướng) khi Ứng dụng iOS đã nhập vào nền
Thiết lập 1: Tôi đã tạo ứng dụng Người gửi TCP và ứng dụng TCP Receiver.
Đối với thử nghiệm này, tôi đã bắt đầu Người gửi TCP trên thiết bị iOS và Bộ thu TCP trên một thiết bị iOS khác. Và sau đó cả hai đều được xác minh là đã tạo kết nối và gửi và nhận dữ liệu. Sau đó tôi đặt ứng dụng TCP Receiver vào nền. Ứng dụng Người gửi TCP biểu thị mất kết nối và bị lỗi (có, tôi đã dự định theo cách đó).
Thiết lập 2: Tôi đã tạo ứng dụng Người gửi UDP và ứng dụng UDP Receiver.
Tương tự như trên, tôi đã khởi động ứng dụng Người gửi UDP trên thiết bị iOS và ứng dụng UDP Receiver trên một thiết bị iOS khác. Trên ứng dụng UDP Receiver, tôi đã đăng ký với một nhóm phát đa hướng, v.v. Tôi đã xác nhận rằng ứng dụng UDP Receiver đang nhận dữ liệu từ nhóm phát đa hướng được gửi bởi ứng dụng UDP Sender. Sau đó tôi đặt ứng dụng UDP Receiver vào nền. Sau 2 phút, tôi nhận được ứng dụng Người gửi UDP để gửi một phần dữ liệu khác. Sau đó tôi bỏ hoàn toàn ứng dụng Người gửi UDP và tắt thiết bị iOS đó. Sau đó tôi đợi thêm 2 phút nữa, sau đó mở ứng dụng UDP Receiver từ nền. Ứng dụng UDP Receiver đã nhận được dữ liệu đã được gửi bởi ứng dụng Người gửi UDP trước khi nó bị chấm dứt.
Trong thiết lập 1, giải thích của tôi là do TCP là một hướng kết nối.
Trong thiết lập2, tôi hiểu UDP không kết nối được. Bất kỳ lời giải thích tại sao setup2 nó làm việc theo cách trong kinh nghiệm của tôi? (Vẫn nhận dữ liệu ngay cả ở chế độ nền)
Nhân tiện, tôi giả định khi bạn nói 'nền' nghĩa là 'bị tạm ngưng' vì bạn không đề cập đến việc đang chạy một ứng dụng hỗ trợ nền (VOIP, âm nhạc, v.v.) Trừ khi bạn làm điều gì đó đặc biệt, nền là trạng thái tạm thời cho ứng dụng của bạn nhanh chóng bị treo sau khi nhập nền. Xem tài liệu vòng đời ứng dụng Apple iOS. – smparkes
Giải thích tuyệt vời! Suy nghĩ của tôi là nội tuyến với lời giải thích của bạn và rằng (+1 lên phiếu) bài viết kỹ thuật rất nhiều xác nhận nó. Vâng, tôi đã có nghĩa là bị đình chỉ không nền. FYI: Lý do tại sao Người gửi TCP của tôi bị lỗi nhanh chóng vì nó liên tục gửi luồng dữ liệu đến Người nhận. – user523234
Điều đó sẽ có ý nghĩa: nếu bạn gửi dữ liệu mà đích không nhận được và thực hiện với cuộc gọi chặn trên chuỗi chính, iOS sẽ thấy ứng dụng của bạn không phản hồi và xóa nó. Kết nối TCP có thể vẫn ổn; nó có kiểm soát dòng chảy để quản lý bộ đệm, nhưng bạn không được phép chặn luồng chính quá lâu. – smparkes