Emberjs:使用Websocket后端作为数据源

时间:2015-08-28 14:44:14

标签: javascript ember.js websocket

我对ember.js和客户端开发一般都很新。 我目前的设置看起来像这样:

Client/Server Schema

这不是像socket.io这样的库。 (下面的协议示例)

所以一般来说,这就是我想要实现的目标。我已经编写了一个Object,它将在请求时返回Promise。由于我在开始时需要登录步骤,因此我想在某处创建对象,并在创建时自动登录。

现在我的问题:

  • 在ember框架中定义类的位置?
  • 在创建后创建/存储对象的位置(由于登录仅在套接字打开时有效,因此需要单例)?
  • 当我需要发送请求时,如何访问对象。

示例登录请求:

请求:

{
    "type": "request",
    "subtype": "apilogin",
    "id": 1234,
    "data": {
        "username": "<string|null>",
        "password": "<string|null>",
        "token": "<string|null>"
    }
}

答案:

{
    "type": "answer",
    "subtype": "apilogin",
    "id": 1234,
    "error": 0,
    "errormessage": "",
    "data": {
        "token": "<string>"
    }
}

令牌只是另一种登录方式,在套接字关闭后最多15分钟有效。 (在网络错误或类似情况后重新连接)。

因为我从来没有真正做过这样的事情,所以我遇到了将问题放在框架中以及如何访问它们的问题。

1 个答案:

答案 0 :(得分:2)

我认为这种情况是Ember services的完美候选人。分别回答你的问题:

  

在ember框架中定义类的位置?

任何地方都可以。如果您使用的是Ember CLI,则可能需要将其放在services目录中。

  

在创建后创建/存储对象的位置(由于登录仅在套接字打开时有效,因此需要单例)?

Ember容器将为您创建实例。默认情况下,从容器中查找的所有项目都是单例,因此您不必担心这一点。

  

当我需要发送请求时,如何访问Object。

您应该将服务注入您需要的类中。要从我链接的指南中获取,这将把服务注入一个类:

Ember.Component.extend({
    // Make sure you name your object SocketService
    socket: Ember.inject.service()
});

或者,要将其注入所有类型的类(例如,将其注入所有路由),请使用初始化程序:

application.inject('route', 'socket', 'service:socket');