ember.js - EmberJS 和 WebSocket |最好的方法?

标签 ember.js websocket

我有一个无法正确回答的问题,也许是因为我缺乏 EmberJS 的经验。

我必须在 EmberJS 中开发一个管理界面,使用 Symfony 2 作为后端,它的行为和感觉应该像一个桌面应用程序。到目前为止一切顺利,但由于很多人都会使用此应用程序内的数据,我真的很想使用 EmberJS 的 WebSocket 适配器实现,因为每个连接的客户端都应该立即(或尽快)了解实体的更改。我可以为 EmberJS 编写一个 WebSocket 适配器,但我的问题是,WebSocket 将执行比 RESTful 操作更多的操作,而且服务器将在没有任何 EmberJS 请求的情况下发送消息(例如,实体发生更改,服务器向所有客户端广播此更改)。这意味着我需要一个基于 RESTful 操作的“命令”结构,根据我的经验,该结构无法与纯 DS 适配器一起使用。

例如:

也许我会触发一个 Controller 方法,该方法将发送如下 websocket 消息:

{命令:“say”,参数:{消息:“大家好!”} }

此命令与实体 (DS) 无关,并且永远不会进入应用程序商店。

另一个例子是这样的:

{命令:“加载实体”,参数:{type:“Vendor\Bundle\Entity\Type”,id:43} }

这将加载应存储在应用程序商店中的实体。

嗯,正如我所说,我对 EmberJS 不太熟悉,我无法找出最好的方法。我是否应该完全绕过 DS 适配器并在加载实体后检查“isDirty”并仅检查推送方法?我很高兴你有任何想法!

最佳答案

据我了解您的问题,您想将更改从后端推送到单页应用程序吗?

您可以使用 self.store.push('modelName', json) 将自定义 JSON 推送到 Ember 中的应用程序存储中。看看docs为了更好的理解。

例如,如果您的服务器通过 websocket 向您发送 JSON,如下所示

{ 
  - "message": {
    "type": "fooModel", 
    "data": {
      ... // Model attributes here 
    }
  }
}

您可以将数据推送到您的商店中。例如,以下代码片段适用于 SocketIO:

App.ApplicationRoute = Ember.Route.extend({                                                              
  activate: function() {                
    // connect to the websocket once we enter the application route                                                                   
    var socket = window.io.connect('http://localhost:8080');                                                           

    var self = this;                                                                                                   

    socket.on('message', function(data){                                                                               
      self.store.push(data.type, data.item);                                                                              
    });                                                                                                                
  }
});  

您可以轻松修改此代码片段以满足您的需求。

关于ember.js - EmberJS 和 WebSocket |最好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22459010/

相关文章:

ember.js - ember-cli 可以在不运行服务器的情况下自动监视和构建吗?

python - 在 Python 3 中使用 asyncio 和 websockets 的长时间延迟

ember.js - 访问模板中的模型数据

ember.js - 如何克隆 Ember 数据记录,包括关系?

ember.js - Emberjs 排序记录

c# - WebSocket 服务器未触发握手

java - 使用 OkHttp3 WebSocket 和 Retrofit 持续跟踪 Android 设备位置

ember.js - emberjs中如何通知parentview子view中的图像已加载

javascript - stackoverflow技术推送消息?

javascript - 如何将二进制数据从 Node.js socket.io 服务器发送到浏览器客户端?