2012-01-13 43 views
6

Tôi có Javascript của trình duyệt sẽ mở WebSocket (sử dụng socket.io) để yêu cầu khởi động quá trình dài và sau đó nhận được một cuộc gọi lại khi quá trình được thực hiện. Khi tôi nhận được cuộc gọi lại, tôi cập nhật trang web để cho người dùng biết quá trình đã hoàn tất.Làm cách nào để khôi phục từ máy tính khách WebSocket chuyển sang chế độ ngủ hoặc ứng dụng chuyển sang chế độ nền (Safari trên iPad)

Tác phẩm này ok, ngoại trừ trên iPad khi tôi chuyển sang ứng dụng khác và sau đó quay lại (không bao giờ nhận được cuộc gọi lại vì tôi đoán ứng dụng không trực tuyến tại thời điểm đó). Tôi giả định rằng điều tương tự sẽ xảy ra trên máy tính xách tay hoặc máy tính khác đang ngủ trong khi chờ đợi cuộc gọi lại.

Có cách nào tiêu chuẩn (hoặc bất kỳ cách nào) để đối phó với kịch bản này không? Cảm ơn.

Để tham khảo, nếu bạn muốn xem các trang vấn đề, đó là tại http://amigen.perfectapi.com/

Trả lời

7

Có một vài điều cần xem xét trong trường hợp này:

Dò tìm ứng dụng sẽ tắt/trên dòng

Xem: Online and offline events.

Khi ứng dụng của bạn phát hiện sự kiện online sau khi máy tính thức dậy, bạn có thể nhận được bất kỳ thông tin nào mà bạn đã bỏ lỡ.

Đối với các trình duyệt web cũ hơn, bạn sẽ cần thực hiện điều này một cách thông minh hơn. Tại Pusher, chúng tôi đã thêm kiểm tra ping-pong giữa máy khách và máy chủ. Nếu khách hàng không nhận được một ping trong một khoảng thời gian nhất định, nó biết có một vấn đề kết nối. Nếu máy chủ gửi một ping và không nhận được một pong trở lại với một thời gian nhất định nó biết có một vấn đề.

Cơ chế bàn bóng bàn là defined in the spec nhưng cách gửi ping hoặc bàn cờ vẫn chưa được xác định trên API WebSocket.

tìm nạp bỏ lỡ thông tin

Hầu hết các máy chủ thời gian thực chỉ mang thông điệp để kết nối với khách hàng. Nếu một khách hàng không được kết nối, có thể do sự gián đoạn mạng tạm thời hoặc máy tính của họ đã ngủ trong một thời gian, sau đó những khách hàng đó sẽ bỏ lỡ thông báo.

Một số khung công tác cung cấp quyền truy cập vào thư thông qua lịch sử/bộ nhớ cache. Đối với những người không cần, bạn sẽ cần phát hiện sự cố (như trên) và sau đó tìm nạp bất kỳ thư bị nhỡ nào. Cách tốt nhất để làm điều này là cung cấp dấu thời gian hoặc ID trình tự với mỗi thư để bạn có thể thực hiện cuộc gọi đến máy chủ web của mình để nói "cung cấp cho tôi tất cả thư từ X".

+5

Chỉ để ghi lại, Socket.IO cũng thực hiện 'ping pong', được gọi là nhịp tim. Điều này sẽ kiểm tra xem kết nối vẫn hoạt động hay không. Khoảng thời gian nhịp tim (ping) có thể được cấu hình. – alessioalex

+0

@alessioalex +1 để nhận xét. Thông tin hữu ích. Cảm ơn. – leggetter

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