【发布时间】:2010-09-29 04:32:33
【问题描述】:
如果有一个 REST 资源我想监控来自其他客户端的更改或修改,那么最好(也是最 RESTful)的方式是什么?
我这样做的一个想法是通过提供特定资源来保持连接打开,而不是在资源不(尚)存在时立即返回。例如,给定资源:
/game/17/playerToMove
对该资源的“GET”可能会告诉我轮到我的对手移动了。与其不断轮询该资源以找出轮到我移动的时间,不如记下移动编号(例如 5)并尝试检索下一步:
/game/17/move/5
在“正常”的 REST 模型中,对此 URL 的 GET 请求似乎会返回 404(未找到)错误。但是,如果相反,服务器保持连接打开,直到我的对手下棋,即:
PUT /game/17/move/5
然后服务器可以返回我的对手放入该资源的内容。这既可以为我提供我需要的数据,也可以在不需要轮询的情况下通知我的对手何时移动。
这种方案是 RESTful 的吗?还是违反了某种 REST 原则?
【问题讨论】:
-
“Scrappy,rest 方法是什么?”
-
您可以使用长轮询,或者将 REST 与 websocket 服务结合,将事件发送到客户端。
标签: rest long-polling polling