0

私の ExtJS 4.1 アプリケーションでは、websocket 接続を使用して、サーバーから ExtJS クラスをリモートでインスタンス化し、制御しています。クライアントは websocket.onmessage に登録され、着信コマンドを待機しています。

そのための簡単なプロトコルを定義しました。サーバーは「CREATE classname id」を送信します。クライアント側では Ext.create を使用してクラスをインスタンス化します。その後、サーバーは websocket を介してオブジェクトにコマンドを送信できます。例: 「DOSTUFF id」。ExtJS の動的読み込みメカニズムを使用しています。

Chrome ではすべて正常に動作します。

Firefox の問題は、オブジェクトが作成される前に 2 番目のコマンド メッセージ (DOSTUFF) が実行されることです。オブジェクトが見つからないため、エラーが発生します。ExtJS が HTTP-GET 経由でファイルをロードする前に、2 番目の websocket コマンドメッセージが実行されたようです。

私の世界では、JavaScript はシーケンシャルに実行されます (私は webworkers を使用しません)。Ext.create(..) の呼び出しは、バックグラウンドで HTTP-GET と同期して実行する必要があると思います。

クライアント アプリケーションの "疑似" トレース出力を次に示します。

ExecuteCommand (Enter): CREATE ("MyClass", "1")
HTTP-GET "MyClass.js"
ExecuteCommand (Enter): DOSTUFF ("1")
ExecuteCommand (Error): DOSTUFF ("1"): Object not found
ExecuteCommand (Enter): CREATE ("MyClass", "1"): OK! Object created!
4

2 に答える 2

1

それは理にかなっている。GET リクエストはデフォルトで非同期です。Firefox のドキュメントを参照してください: https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

この問題を回避するには、オブジェクトの存在を確認し、必要に応じて数秒後に再送信するようサーバーに通知し、繰り返します。

于 2012-08-20T22:17:23.493 に答える