使用socket.io作为api

时间:2012-01-03 03:47:11

标签: api rest websocket

我很惊讶我找不到任何问题。如何统一实现REST over WebSockets?我正在构建一个Web应用程序,并希望在ajax调用上使用websockets。

首先,您如何表示URI?其次,你如何表示HTTP方法(GET,PUT,POST,...)?

socket.emit('set', ...)
socket.emit('get', ...)
socket.emit('delete', ...)

2 个答案:

答案 0 :(得分:10)

这没有任何意义。使用WebSockets的重点是绕过执行HTTP请求所带来的开销。您希望在流式HTTP上重新实现HTTP。

在大多数情况下,它实际上会导致更多开销,因为如果客户端不支持WebSockets或Flash套接字,它将回退到HTTP长轮询。这意味着您有一个虚假的HTTP请求以及传递数据的实际HTTP请求。

如果要构建RESTful应用程序,请使用HTTP。

如果要构建事件驱动的应用程序,请使用WebSockets。

使用正确的工具完成工作。

答案 1 :(得分:10)

此链接可能描述了您要执行的操作:

How can Socket.io and RESTFul work together?

想要拥有GET,SET,DELETE等消息并没有错。重用现有的API结构并没有错 - 您仍然需要路由,并且URI可以由服务器端的路由解析,以对应GET / SET / DELETE的控制器。

e.g:

socket.emit('set', {uri: 'https://stackoverflow.com/questions/6339393/how-can-socket-io-and-restful-work-together', params: {someKey: "someValue}).

这并没有充分利用websockets的功能 - 双向通信,它确实允许流式传输请求,这可能会更快,具体取决于您轮询数据的频率。

祝你好运,保持冷淡!