在我的 ExtJS 4.1 应用程序中,我使用 websocket 连接从服务器远程实例化和控制 ExtJS 类。客户端注册到 websocket.onmessage 并等待传入命令。
我为此定义了一个简单的协议。服务器发送一个“CREATE classname id”。在客户端,我使用 Ext.create 来实例化该类。然后服务器可以通过 websocket 向对象发送命令。例如“DOSTUFF id”。我正在使用 ExtJS 的动态加载机制。
在 Chrome 中一切正常。
Firefox 的问题是,第二条命令消息 (DOSTUFF) 在对象创建之前执行。这会导致错误,因为找不到对象。似乎第二个 websocket 命令消息是在 ExtJS 通过 HTTP-GET 加载文件之前执行的。
在我的世界中,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!