1

WebSocket サポートに Socket.IO を使用するモバイル Web アプリを持っていますが、ホーム ボタンを押してから Safari に戻る場合を除いて、うまく機能します。別のアプリに移動して Safari をバックグラウンドにしてから戻ってくると、WebSocket 接続が機能しなくなります。

注: Safari の別のタブに移動してから戻ってきても、WebSocket は壊れません。実際に Safari アプリを終了する必要があります。

ソケットを介してメッセージを送信しようとしたときに、Web コンソールでエラーが発生しません。機能しません。何か案は?

4

1 に答える 1

5

iOS でアプリケーションが「最小化」されると、アプリケーションがバックグラウンドに置かれるだけでなく、アプリケーションがキャッシュされ、実際にアプリケーションの処理が停止されます。これにより、バッテリーを節約し、バックグラウンド アプリケーションが動作して「悪いことをする」ことを防ぐことができます。 "。

これが接続を中断する理由であり、これは iOS の正常な動作です。

セッションを復元するには、サーバー側のアプリケーション ロジックにセッションを実装し、しばらく前に閉じられた場合に新しい接続でセッションを復元する機能を実装する必要があります。

参考までに、Android ストック ブラウザは接続を維持しますが、JS の処理を​​フリーズします。そのため、アプリケーションがタイムアウトを実装している場合、サーバーが応答していないと認識した後で Android クライアントをドロップします。同様に、別のタブに移動すると JS のパフォーマンスが低下し、時間指定された関数とコールバックの内部スタックが遅くなり、タブに焦点を合わせているときと同じ頻度でそれらが実行されるとは予想されません。

于 2012-12-20T13:39:56.093 に答える