我有一个应用程序,其主要功能是通过websockets或长轮询实时工作.
但是,大多数站点都是以RESTful方式编写的,这对于应用程序和其他客户来说非常好.但是,我正在考虑转换到所有站点功能的websocket API,远离REST.这样我就可以更轻松地将实时功能集成到网站的所有部分.这会使构建应用程序或移动客户端变得更加困难吗?
我发现有些人已经在做这样的事:SocketStream
不是说这里的其他答案没有价值,他们提出了一些好处.但是我会违背普遍的共识并同意你的观点,即移动到websockets而不仅仅是实时功能是非常有吸引力的.
我正在认真考虑通过websockets将我的应用程序从RESTful架构转移到更多RPC样式.这不是一个"玩具应用程序",我不是只讨论实时功能,所以我确实有所保留.但是我认为这条路线有很多好处,并且觉得它可能会成为一种特殊的解决方案.
我的计划是使用DNode,SocketIO和Backbone.使用这些工具,我的Backbone模型和集合可以通过简单地调用函数RPC样式从/向客户端和服务器传递.不再需要管理REST端点,序列化/反序列化对象等等.我还没有使用socketstream,但看起来值得一试.
我还有很长的路要走,我可以肯定地说,这是一个很好的解决方案,我敢肯定,它不是为每个应用的最佳解决方案,但我相信,这种组合是非常强大的.我承认存在一些缺点,例如失去缓存资源的能力.但我觉得优势将超过他们.
我有兴趣跟踪您在探索此类解决方案方面取得的进展.如果您有任何github实验,请指出我.我还没有,但希望很快.
以下是我一直在收集的以后阅读链接的列表.我不能保证他们都是值得的,因为我只是撇去了其中许多人.但希望有些人会有所帮助.
关于在Express中使用Socket.IO的精彩教程.它向socket.io公开了快速会话,并讨论了如何为每个经过身份验证的用户提供不同的会议室.
http://www.danielbaulig.de/socket-ioexpress/
有关身份验证,Joyent托管等的node.js/socket.io/backbone.js/express/connect/jade/redis教程:
http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/
http://fzysqr.com/2011/03/27/nodechat-js-continued-authentication-profiles-ponies-and-a-meaner-socket-io/
使用Pusher和Backbone.js的教程(使用Rails):
http://blog.pusher.com/2011/6/21/backbone-js-now-realtime-with-pusher
在客户端上使用backbone.js构建应用程序,在服务器上使用express,socket.io,dnode构建node.js.
http://andyet.net/blog/2011/feb/15/re-using-backbonejs-models-on-the-server-with-node/
http://addyosmani.com/blog/building-spas-jquerys-best-friends/
http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/
http://fzysqr.com/2011/03/27/nodechat-js-continued-authentication-profiles-ponies-and-a-meaner-socket-io/
使用带有DNode的Backbone:
http://quickleft.com/blog/backbone-without-ajax-part-ii
http://quickleft.com/blog/backbone-without-ajax-part-1
http://sorensen.posterous.com/introducing-backbone-redis
https://github.com/cowboyrushforth/minespotter
http://amir.unoc.net/how-to-share-backbonejs-models-with-nodejs
http://hackerne.ws/item?id=2222935
http://substack.net/posts/24ab8c
HTTP REST和WebSockets非常不同.HTTP是无状态的,因此Web服务器不需要知道任何内容,您可以在Web浏览器和代理中进行缓存.如果使用WebSockets,则服务器将变为有状态,并且您需要与服务器上的客户端建立连接.
仅当您需要将数据从服务器推送到客户端时才使用WebSockets ,该通信模式不包含在HTTP中(仅通过解决方法).如果其他客户端创建的事件需要可供其他连接的客户端使用,例如在用户应该对其他客户端行为采取行动的游戏中,PUSH会很有用.或者,如果您的网站正在监控某些内容,服务器会始终将数据推送到客户端,例如股票市场(实时).
如果您不需要从服务器推送数据,则通常更容易使用无状态HTTP REST服务器.HTTP使用简单的请求 - 回复通信模式.
我正在考虑转换到所有站点功能的WebSocket api
不,你不应该这样做.如果您支持这两种型号,则没有任何危害.使用REST进行单向通信/简单请求和WebSocket进行双向通信,尤其是当服务器想要发送实时通知时.
WebSocket是一种比RESTful HTTP更有效的协议,但在以下区域仍然是基于 WebSocket的RESTful HTTP分数.
已为HTTP定义了创建/更新/删除资源.您必须在WebSockets的低级别实现这些操作.
WebSocket连接在单个服务器上垂直扩展,HTTP连接水平扩展.WebSocket水平扩展有一些专有的非基于标准的解决方案.
HTTP带有很多很好的功能,如缓存,路由,多路复用,gzipping等.如果选择Websocket,这些功能必须建立在Websocket之上.
搜索引擎优化适用于HTTP URL.
所有代理,DNS,防火墙尚未完全了解WebSocket流量.它们允许端口80,但可能首先通过窥探来限制流量.
WebSocket的安全性是全有或全无的方法.
有关更多详细信息,请查看此文章.
我可以使用TCP(WebSockets)作为主要Web内容交付策略的唯一问题是,关于如何使用TCP设计网站架构和基础架构的阅读材料非常少.
所以你无法从别人的错误中吸取教训,发展也会变慢.它也不是一个"久经考验"的策略.
当然,你也会失去HTTP的所有优点(无状态,缓存是更大的优势).
请记住,HTTP是TCP的抽象设计,用于提供Web内容.
让我们不要忘记SEO和搜索引擎不做websockets.所以你可以忘记SEO.
我个人建议不要这样做,因为风险太大.
不要使用WS来提供网站服务,使用它来提供网络应用程序
但是,如果你有玩具或个人网站,一定要去.尝试一下,做到最前沿.对于企业或公司而言,您无法证明这样做的风险.