Ember Data with Websockets



在模型的余烬指南中,它说(1):

Ember Data还旨在与 socket.io,Firebase或WebSockets等流API配合使用。您可以打开服务器的套接字,并在记录发生更改时将其推送到存储中。

我尝试编写一个使用 websocket 的自定义适配器,但我并没有走得很远。我在任何地方都找不到任何工作示例。

这是我完全未完成的原型:

DS.WSAdapter = DS.Adapter.extend(Ember.Evented, {
    websocket: undefined,
    init: function () {
        if(this.websocket === undefined)
        {
            this.websocket = new WebSocket('ws://localhost:8887');
            this.websocket.onopen = function(e) {
                console.log("Connection established!");
            };
            this.websocket.onmessage = function(e) {
                // What to do here?
            }; 
        }
        this._loadData();
    },
    //....

索蒙可以帮我使用网络插座适配器吗?

我的主要问题是我不知道当websocket.onmessage()被执行时该怎么办。我什至无法访问商店(使用DS.get('defaultStore'))或任何东西

我没有直接在 Ember 中使用套接字的经验,但我最近完成了一个 Ember Data + Firebase 适配器,它应该遵循非常相似的方法。

你至少应该能够把它当作灵感:

https://github.com/sandersonet/ember-data-firebase

Firebase 确实从下面的套接字中提供了额外的抽象层,但方法非常相似。

看看 http://emberjs.com/guides/models/frequently-asked-questions/#toc_how-do-i-inform-ember-data-about-new-records-created-on-the-backend

某些应用程序可能需要在存储中添加或更新记录 无需通过 store.find 请求记录。要实现这一目标,您 可以使用 DS。存储的推送、推送有效负载或更新方法。这是 对于具有通道(如 SSE 或 Web)的 Web 应用程序很有用 套接字),以通知它后端上有新的或更新的记录。

基本上,您需要反序列化在 onmessage 挂钩中接收的数据,并使用store.push('model', record)或替代方法将新对象推送到数据存储。

最新更新