我很惊讶在这方面找不到任何问题。如何在WebSockets上统一实现REST ?我正在构建一个web应用程序,并希望使用ajax调用websockets。
首先,如何表示URI?其次,如何表示HTTP方法(GET、PUT、POST等)?
socket.emit('set', ...)
socket.emit('get', ...)
socket.emit('delete', ...)
这毫无意义。使用WebSockets的全部意义在于绕过HTTP请求所带来的开销。你想在流HTTP之上重新实现HTTP。
在大多数情况下,它实际上会导致更多的开销,因为如果客户端不支持WebSockets或Flash socket,它将回落到HTTP长轮询。这意味着你有一个虚假的HTTP请求和实际的HTTP请求来传递数据。
如果你想构建一个RESTful应用,使用HTTP。如果你想构建一个事件驱动的应用,使用WebSockets。
使用合适的工具。
这个链接可能描述了您要做的事情:
如何使用Socket。io和RESTFul一起工作?
想要GET、SET、DELETE这样的消息并没有错。重用现有的API结构并没有错——你仍然需要路由,并且URI可以被服务器端的路由解析,以对应于GET/SET/DELETE的控制器。
例如:
socket.emit('set', {uri: 'https://stackoverflow.com/questions/6339393/how-can-socket-io-and-restful-work-together', params: {someKey: "someValue}).
这并没有充分利用websockets所做的双向通信,但是它确实允许流请求,这可能会更快,这取决于你轮询数据的频率。