web2py + ember + websockets应用程序的体系结构

时间:2014-06-27 06:54:17

标签: ember.js websocket ember-data web2py

我正在尝试向我的Ember网络应用via websockets添加准实时图层。我正在考虑以下设置:

frontend client <--> web2py server (REST API) <--->    ------
      ^                                                | DB |
      |---> websockets server <--> BG services <-->    ------

每当前端登录到我的web2py服务器(提供REST API以访问前端所需的数据)时,它还必须连接到&#34; websockets服务器&#34;。 BG服务将使用此服务器为连接的前端提供准实时数据。

BG服务是后台进程,它从数据库中提取复杂数据,无需来自前端的请求,并在准备就绪时将此数据推送到连接的客户端。

我有一些问题,我已经为自己解答了(我可能在这里错了,请纠正我):

  • A1:如何知道哪些是连接的客户端?我想websockets服务器知道哪些客户端已连接
  • A2:如何将消息推送到前端?只需向websockets服务器发送一条消息,指定必须将其分发到的组。
  • A3:如何组织&#34; websocket群组&#34;?根据您的数据设计策略:例如,如果组中的所有成员都必须接收属于某个组织的数据,请为每个组织创建一个websockets组:然后只需按下该组织即可组,以及属于该组织组的所有连接的前端将接收数据。
  • A4:如何推送JSON? Encode it first,并将其作为文字发送。解码客户端。 (Websockets可以发送text and binary data)。

我不确定以下内容:

  • B1:如何推送到前端的不同端点?例如,如何推送到personspostscomments
  • B2:如何将单个服务器用于REST API和websockets服务器?

根据EmberSockets

$window.App = Ember.Application.create({

    Socket: EmberSockets.extend({
        host: 'localhost',
        port: 8888,
        controllers: ['index']
    })

});

根据RESTAdapter上的文档:

App.ApplicationAdapter = DS.RESTAdapter.extend({
  host: 'https://api.example.com'
});

是否可以使用单个主机URL来处理ws和http连接?我不认为将前端连接到两个不同的主机(特别是两个不同的端口,可能在客户网络中被阻止)是一个好主意。

  • B3:我可以将什么服务器用于websockets?目前我正在使用apache for http。我可以使用例如支持websockets的Tornado,但是如何让Tornado和apache一起玩呢?如何通过使用单个URL告诉客户端与apache进行http连接,以及与Tornado建立连接?这只是调整apache配置,并将ws连接重定向到另一台服务器吗?

0 个答案:

没有答案