Socket.io和RESTFul如何协同工作?

(我对RESTFul不熟悉,如果我的概念错误,请纠正我)

在RESTFul体系结构中,我们将每个操作映射到一个URL。 如果我点击“发表文章”,可能实际上是URL http://example.com/和一些数据action=post&content=blahblah

如果我想发布,但不刷新整个网页,我可以使用JavaScript的XMLHTTPRequest。 我发布它,然后得到它的内容,并将其插入到我的网页中的div。 这些操作都是asynchronous的。

然后我知道有一个名为WebSocket东西,它是封装的socket.io 。 它使用“消息”在客户端和服务器之间进行通信。 当我点击“发布”客户端只是调用socket.send(data)并等待服务器的client.send(data) 。 这是神奇的。 但是URL呢?

两种模式都可以使用而不用重复自己? 换句话说,每个动作都有它的URL,其中一些可以实时与用户交互(通过socket.io?)

而且,我应该这样做吗? 在一个非常互动的networking程序(例如游戏)中,RESTFul仍然是有意义的?

您正在为通过http映射到REST的操作定义处理程序。 POST和GET通常是指通过实体进行更新和查询。 绝对没有理由不能为这两个上下文中的CRUD操作的通用版本定义一个处理程序。 我通常这样做的方式是将“路由”的概念引入到实时传输中,并将这些概念映射回相同的CRUD处理程序。

你有一个会话,你可以施加相同的ACL等。

  +---------------------------------+ |                                 | |      BROWSER                    | |                                 | +--+--^-------------------+---^---+    |  |                   |   |    |  |                   |   | +--v--+---+            +--v---+---+ |         |            |          | | HTTP    |            | SOCKET.IO| +--+---^--+            +--+---^---+    |   |                  |   | +--v---+------------------v---+---+ |                                 | |        ROUTING/PUBSUB           | +-+--^-------+--^-------+--^------+   |  |       |  |       |  | +-v--+--+  +-v--+--+  +-v--+-+ |       |  |       |  |      | | USERS |  | ITEMS |  |ETC   | +-------+  +-------+  +------+     ENTITY CRUD HANDLERS 

我最近在我的博客上发布了这个 :

为WebSocketsdevise一个CRUD API

在构buildWeld时 ,我们使用REST和WebSockets(Socket.io)。 WebSocket上的三个观察:

  1. 由于WebSockets是如此自由的forms,你可以命名你想要的事件,但最终不可能debugging。
  2. WebSocket没有HTTP的请求/响应forms,所以有时很难判断事件来自哪里,或者去哪里。
  3. 如果WebSockets可以适应应用程序中现有的MVC结构,那么最好使用与REST API相同的控制器。

我的解决scheme

  • 我的服务器上有两个路由文件: routes-rest.jsroutes- sockets.js
  • 我的事件看起来像这个例子: "AppServer/user/create"
  • 我使用正斜杠 (“/”)使事件看起来像路由path。
  • 第一个string是目标 (〜“主机名”,如果这实际上是一个path)。
  • 第二个string是模型
  • 第三个string是CRUD动词 :即创build,读取,更新,删除。