我有一个应用程序,其主要功能可在实时通过的WebSockets或长轮询。
然而,大部分的网站是写在一个RESTful的方式,这对于未来的应用程序S和其他客户端不错。 不过,我想从静止过渡到WebSocket API的所有网站的功能,流连忘返。 这将使它更容易为我的实时功能集成到网站的所有部分。 这会使其更难以建立的应用程序或移动客户端?
我发现,有些人已经在做这样的东西: SocketStream
我有一个应用程序,其主要功能可在实时通过的WebSockets或长轮询。
然而,大部分的网站是写在一个RESTful的方式,这对于未来的应用程序S和其他客户端不错。 不过,我想从静止过渡到WebSocket API的所有网站的功能,流连忘返。 这将使它更容易为我的实时功能集成到网站的所有部分。 这会使其更难以建立的应用程序或移动客户端?
我发现,有些人已经在做这样的东西: SocketStream
Not to say that the other answers here don't have merit, they make some good points. But I'm going to go against the general consensus and agree with you that moving to websockets for more than just realtime features is very appealing.
I am seriously considering moving my app from a RESTful architecture to more of an RPC style via websockets. This is not a "toy app", and I'm not talking about only realtime features, so I do have reservations. But I see many benefits in going this route and feel it could turn out to be an exceptional solution.
My plan is to use DNode, SocketIO, and Backbone. With these tools, my Backbone models and collections can be passed around from/to client and server by simply calling a functions RPC-style. No more managing REST endpoints, serializing/deserializing objects, and so forth. I haven't worked with socketstream yet, but it looks worth checking out.
I still have a long way to go before I can definitively say this is a good solution, and I'm sure it isn't the best solution for every application, but I'm convinced that this combination would be exceptionally powerful. I admit that there are some drawbacks, such as losing the ability to cache resources. But I have a feeling the advantages will outweigh them.
I'd be interested in following your progress exploring this type of solution. If you have any github experiments, please point me at them. I don't have any yet, but hope to soon.
Below is a list of to-read-later links that I've been collecting. I can't vouch that they are all worthwhile, as I've only skimmed many of them. But hopefully some will help.
Great tutorial on using Socket.IO with Express. It exposes express sessions to socket.io and discusses how to have different rooms for each authenticated user.
Tutorial on node.js/socket.io/backbone.js/express/connect/jade/redis with authentication, Joyent hosting, etc:
Tutorial on using Pusher with Backbone.js (using Rails):
Build application with backbone.js on the client and node.js with express, socket.io, dnode on the server.
Using Backbone with DNode:
HTTP REST和WebSockets的有很大的不同。 HTTP是无状态的 ,所以网络服务器并不需要知道什么,以及你在Web浏览器和代理中获得缓存。 如果您使用WebSockets,您的服务器正在成为有状态的 ,你需要有服务器到客户端的连接。
只有当你需要使用WebSockets PUSH从服务器到客户端的数据,即通信模式不包含在HTTP(仅解决方法)。 PUSH是有益的,如果被其他客户创建的事件必须是可用的,例如在游戏中,用户应该对其他客户的行为起作用的其它连接的客户端。 或者,如果你的网站是什么监控,其中服务器将数据推送到客户端的所有的时间如股票市场(生活)。
如果你不需要从服务器推送的数据,它通常是更容易使用无状态HTTP REST服务器。 HTTP使用一个简单的请求-答复通信模式。
我在考虑过渡到WebSocket API为所有网站功能
不,你不应该这样做。 有没有危害,如果你支持两种模型。 特别是当服务器要发送实时通知使用REST的单向通信/简单的请求和WebSocket的用于双向通信。
的WebSocket比RESTful的HTTP,但仍超过下面区域的WebSocket 的RESTful HTTP分数的更有效的协议。
创建/更新/删除的资源已被定义为良好HTTP。 您在低级别的WebSockets执行这些操作。
WebSocket连接垂直缩放,其中作为HTTP连接水平扩展在单个服务器上。 还有对于WebSocket的水平缩放一些专有的基于标准的解决方案不。
HTTP自带了很多优秀的功能,如高速缓存,路由,复用gzip压缩等,这些必须建立在WebSocket的顶部,如果你选择的WebSocket。
搜索引擎优化,非常适用于HTTP网址。
所有代理,DNS,防火墙还没有充分认识到的WebSocket流量。 他们允许使用80端口,但可能通过先窥探它限制流量。
与WebSocket的安全性是要么全有要么全无的方法。
看看这个文章的更多细节。
我可以使用TCP(网页套接字)作为主要的网络内容交付战略的唯一问题是,有很少的阅读材料,在那里有关如何使用TCP来设计你的网站架构和基础设施。
所以你不能从别人的错误中学习和发展将是慢。 这也不是一个“久经考验”的策略。
当然,你也将失去HTTP的所有优点(无状态的,并且缓存是更大的优势)。
请记住,HTTP是TCP专为网络服务内容的抽象。
而且我们不要忘记,搜索引擎优化和搜索引擎不这样做的WebSockets。 所以,你可以搜索引擎优化忘记。
我个人建议对本作有太多的风险。
不要使用WS的服务网站,使用它的服务的Web应用程序
但是,如果你有一个玩具或通过各种手段在个人网站去了。 试试吧,是前沿。 对于一个企业或公司,你不能证明这样做的风险。
我会考虑同时使用。 每种技术都有自己的优点,也没有一个一刀切的解决方案。
工作的分离去是这样的:
的WebSockets将与其中需要会话的服务器进行通信的应用的主要方法 。 这消除了需要对旧的浏览器(这个问题是对旧的浏览器,这将消除这种支持)许多黑客
REST的API用于未面向会话的 GET电话(即不认证需要),从浏览器缓存有好处。 这方面的一个很好的例子是用于由Web应用程序中使用的下拉菜单的参考数据。 然而。 可以更频繁地更换了一下比...
HTML和Javascript。 这些包括web应用程序的UI。 这些通常将有利于被放置在一个CDN。
使用WSDL Web服务仍然是企业级和跨企业交流的最好方式,因为它提供了消息和数据传递一个明确的标准。 首先你会卸载该到DataPower设备代理到Web服务处理程序。
所有这一切都发生在这给通过SSL已经使用安全套接字的HTTP协议。
因为虽然移动应用程序,网页套接字无法重新回到断开的会话( 如何重新连接紧密结合后的WebSocket )和管理是不平凡的。 因此, 对于移动应用 ,我还是希望推荐REST API和投票。
另外一点需要注意的WebSockets使用VS时,REST是可扩展性 。 WebSocket的会议仍然由服务器进行管理。 当处理得当是无状态(这意味着有一个需要管理任何服务器状态)的RESTful API,从而可扩展性水平比垂直增长(更便宜)。
我想从服务器更新?
到Socket.io的缺点是:
我仍然会用Socket.io在我的项目,而不是基本的web形式的其余部分将做很好。
我学到了一点教训(艰难地)。 我做了在Ubuntu AWS EC2云服务(使用强大的GPU)上运行的数字运算应用程序,我想作一个前端,它只是为了看它的实时进程。 由于这样的事实,它需要实时数据,很明显,我需要的WebSockets将更新内容推。
它开始了概念验证和伟大的工作。 但后来,当我们想让它提供给公众,我们必须添加用户会话,所以我们需要登录的功能。 不管你如何看待它,WebSocket的必须知道它涉及哪些用户,所以我们采取了使用的WebSockets对用户进行验证的快捷方式 。 这似乎很明显,这是方便。
实际上,我们不得不花安静一段时间,使连接可靠。 我们开始用一些廉价的WebSocket的教程,但发现我们的实现不能当连接断开时自动重新连接。 当我们切换到插座-io的所有改进。 插座-IO是必须的!
说了这么多,说实话,我认为我们错过了一些伟大的插座-io的功能。 插座-IO有很多报价,我相信,如果你把它在考虑在你最初的设计,你可以得到更多的方便。 与此相反,我们只是取代了旧的WebSockets与插座-IO的WebSocket的功能,那就是它。 (无房,无渠道,...)进行重新设计可能做出的一切更强大。 但我们没有那个时间。 这件事情要记住我们的下一个项目。
接下来,我们就开始存储越来越多的数据(用户历史记录,发票,交易,...)。 我们储存了所有的它在AWS dynamodb数据库,并再次,我们用插座-io的从前端至后端沟通CRUD操作。 我认为,我们拐错了弯那里。 那是一个错误。
说了这么多,我们要活在下周。 我们的时间到了那里,一切正常。 而且它的速度快,但它会规模?
基于WebSockets的(或长轮询)传输主要服务于(附近)服务器和客户端之间的实时通信。 虽然在许多情况需要这些类型的传输的众多方案,如聊天或某种实时饲料或其他的东西,而不是需要一些Web应用程序的所有部分将必然与服务器双向连接。
REST是基于资源结构,它能够很好的理解,并提供一切都结束了其他架构自己的利益。 的WebSockets更倾向于在实时数据这需要你以优先级或资源和饲料(如果你不想使用REST)区分来创建某种基于服务器的逻辑流/供稿。
我认为最终会有更多的WebSockets像为中心的框架socketstream在未来当该运输将更加广泛和更好地理解/记录的数据类型/形式不可知交付的形式。 不过,我认为,这并不意味着它会/应更换REST只是因为它提供了这不一定是在许多用例和场景所需的功能。
这不是一个好主意。 该标准甚至没有完成呢,如果你想这样做,现在你最终需要退回到闪存或长轮询等。在未来它可能仍然不会让一个跨浏览器的支持不同,等等。很大的意义,因为服务器必须支持离开连接开放给每一个用户。 大多数Web服务器的设计,而不是在擅长快速响应请求,并尽快关闭它们为可能。 哎呀,即使您的操作系统将不得不进行调整,以应付大量的并发连接(使用了更多的临时端口和内存的每个连接)。 坚持使用REST尽可能多的网站,你可以。