9

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

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

优点:

  • 用于 Web 以外的其他客户端的 REST API
  • Auth 可以完全通过 socket.io 完成。仅与 REST 请求一起发送令牌。
  • 使用 REST 的好处。
  • 也可以很好地与 Redis 等发布/订阅服务一起使用

缺点:

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

你怎么看,有什么我没有想到的重大缺点吗?

4

3 回答 3

6

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

这正是 Tower 正在做的事情:

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

于 2012-07-25T04:09:46.377 回答
3

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

于 2012-07-25T03:53:48.507 回答
1

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

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

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

于 2012-07-26T08:43:18.197 回答