RESTful后端和socket.io进行同步

今天,我有了以下设置的想法。 创build一个nodejs服务器以及expresssocket.io 。 有了快递,我会创build一个RESTful API,连接到一个mongo。 BackboneJS或类似的将客户端连接到该REST API。
现在,每当MongoDB(即iam感兴趣的数据)发生变化时,socket.io就会向客户端发送一个事件,这会对已经发生变化的数据进行处理。 然后,客户端会触发相应的AJAX请求到REST,以获取需要的新数据。

所以,socket.io连接的行为就像是一个同步触发器。 整个访问将在那里,也可以这样pipe理会话。 所有的有效载荷将通过http发送。

优点:

  • REST API可用于其他客户端而不是Web
  • Auth可以完全通过socket.io完成。 只发送令牌和REST请求。
  • 使用REST的好处。
  • 还可以和Redis这样的pub / sub服务很好的玩,

缺点:

  • 比使用纯socket.io更大的开销。

你怎么看,有没有我没有想到的很大的缺点?

我同意@CharlieKey,你应该发送更新的数据,而不是重新请求。

这正是塔正在做的事情:

  • 保存一些数据: https : //github.com/viatropos/tower/blob/development/src/tower/model/persistence.coffee#L77
  • 插入到mongodb(游标是一个查询/持久性抽象): https : //github.com/viatropos/tower/blob/development/src/tower/model/cursor/persistence.coffee#L29
  • 通知套接字: https : //github.com/viatropos/tower/blob/development/src/tower/model/cursor/persistence.coffee#L68
  • 向客户端发送更新的logging: https : //github.com/viatropos/tower/blob/development/src/tower/server/net/connection.coffee#L62

使用套接字作为重新请求Ajax的触发器的缺点是每个连接的客户端都必须获取数据,所以如果有100个人在您的网站上,每次数据更改时都会有100个HTTP请求 – 您可以在哪里重用套接字连接。

我认为用socket.io事件推送更新的数据会比重新请求最新的更好。 更好的是,你只能推送修改过的数据,减less通过线路发送的数据量。 总的来说虽然一个有趣的想法

我会看看Now.js,因为它几乎完全符合你的需求。

它创build一个在客户端和服务器之间共享的名字空间。 服务器可以直接调用客户端的function,反之亦然。

这就是说,如果你坚持要使用MongoDB和Node.js,那么现在的基础架构决定了,否则就会有一个CouchDB ,它是一个完整的Web服务器和文档数据库,内置复杂的复制机制。