虽然我理解上述问题的答案在某种程度上取决于应用程序的体系结构,但我主要对非常简单的场景感兴趣。
本质上,如果我的应用程序每5秒或每分钟发出一次更改,那么用于维护打开的Web套接字连接的数据将在什么时候超过通过简单轮询所浪费的数量?
基本上,我感兴趣的是,如果应用程序不一定需要实时更新,而只需要定期检查,那么是否有一种方法可以量化使用Meteor这样的框架会导致多大的效率低下。
请注意,这里我的重点是带宽利用率,而不一定是数据库访问时间,因为Meteor这样的框架具有高度优化的方法,只请求数据库更新。
发布于 2017-06-24 00:31:45
websocket连接的全部意义在于,您永远不必为更改而切换应用程序。相反,客户机只需连接一次,然后服务器就可以直接发送客户端更改,只要这些更改可用。客户从来不需要问。当数据可用时,服务器只发送数据。
对于任何类型的服务器启动的-数据,这是更有效的带宽比http轮询。除了给出更及时的结果(结果会立即交付,而不是由客户端在下一个轮询间隔中才发现)。
对于纯带宽的使用,细节将取决于确切的情况。http轮询请求必须设置TCP连接并确认该连接(如果是SSL连接,则需要更多的数据),然后它必须发送http请求,包括属于该主机的任何相关cookie,并包括相关的标头和GET URL。然后,服务器必须发送响应。而且,大多数情况下,所有这些轮询开销都将被完全浪费带宽,因为没有什么新的报告。
webSocket从一个简单的http请求开始,然后将协议升级到webSocket协议。webSocket连接本身根本不需要发送任何数据,直到服务器有东西要发送到客户端,在这种情况下,服务器只发送数据包。发送数据本身的开销也要小得多。没有饼干,没有标题,等等.只是数据而已。即使您在webSocket上使用了一些保存日志,与HTTP请求的开销相比,数据量仍然非常小。
所以,你能节省多少带宽取决于具体情况。如果它需要50个轮询请求才能找到任何有用的数据,那么与webSocket场景相比,所有这些http请求都被完全浪费了。带宽的差异可能是巨大的。
您询问了一个只需要定期检查的应用程序。一旦您有了一次定期检查,导致没有数据被检索,那就是浪费带宽。这就是webSocket的全部概念。当没有要发送的数据时,您就不会消耗任何带宽(或接近于没有带宽)。
发布于 2017-06-25 06:01:22
我相信@jfriend00很清楚地回答了问题。然而,我确实想补充一个想法。
通过为WebSocketsvs.HTTP提供最坏的(也是不可能的)场景,您将清楚地看到,Websocket连接在带宽(可能是所有性能)方面都有优势。
这是Websockets /s HTTP的最坏情况:
这是Websockets最糟糕的情况,它的目的是推送数据,而不是轮询.即使在这种情况下,Websockets也可以节省带宽和CPU周期。
认真地说,即使忽略DNS查询(由客户端执行,所以您可能不关心它)和TCP/IP握手(这对客户端和服务器来说都很昂贵),Websocket连接仍然具有更高的性能和成本效益。
,我会解释
每个HTTP请求都包含大量数据,例如cookie和其他标头。在许多情况下,每个HTTP请求也要接受客户端身份验证.数据很少被泄露给任何人。
这意味着HTTP每个request.Stateless传递所有这些数据(并可能执行客户端身份验证)一次
但是,Websocket连接是有状态的。数据只发送一次(而不是每次请求)。客户端身份验证仅在Websocket连接协商期间进行。
这意味着Websocket连接每个连接传递一次相同的数据(并可能执行客户端身份验证)一次(每次轮询一次)。
因此,即使在这种最坏的情况下,轮询总是正数,Websockets用于轮询而不是推送数据,Websockets仍然可以节省服务器的带宽和其他资源(即CPU时间)。
简单地说,我认为你的问题的答案是“永远不会”。Websockets从来没有比轮询效率更低。
https://stackoverflow.com/questions/44731313
复制相似问题