RESTful后端和socket.io进行同步

时间:2012-07-17 22:03:45

标签: node.js rest websocket socket.io

今天,我有了以下设置的想法。与nodejsexpress一起创建socket.io服务器。使用express,我将创建一个RESTful API,它连接到mongo。 BackboneJS或类似的将客户端连接到REST API 现在,每当mongodb(即其中感兴趣的数据)发生变化时,socket.io都会向客户端发送一个事件,该事件将为已经更改的数据提供一个courser。然后,客户端将触发对REST的适当AJAX请求,以便在需要的地方获取新数据。

因此,socket.io连接的行为类似于同步触发器。它将用于整个访问,也可以通过这种方式管理会话。所有有效载荷都将通过http发送。

优点:

  • REST API,用于与Web以外的其他客户端
  • Auth可以完全通过socket.io完成。仅发送令牌和REST请求。
  • 使用REST的好处。
  • 也可以很好地使用像Redis'
  • 这样的酒吧/子服务

缺点:

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

您怎么看?我没有想到的任何重大缺点?

3 个答案:

答案 0 :(得分:6)

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

这正是塔正在做的事情:

使用套接字作为使用Ajax重新请求的触发器的缺点是每个连接的客户端都必须获取数据,因此如果您的站点上有100个人,那么每次数据更改时都会有100个HTTP请求 - 其中你可以重用套接字连接。

答案 1 :(得分:2)

我认为使用socket.io事件推送更新的数据比重新请求最新数据更好。更好的是,您只能推送修改后的数据,减少通过线路发送的数据量。整体虽然是一个有趣的想法

答案 2 :(得分:1)

我会调查Now.js,因为它几乎完全符合您的需要。

它创建一个在客户端和服务器之间共享的命名空间。服务器可以直接调用客户端上的函数,反之亦然。

如果你坚持当前的基础设施决定使用MongoDB和Node.js,那么就会有CouchDB这是一个完整的Web服务器和文档数据库,内置了复杂的复制机制。