关于WebSocket通常是如何工作的,比如here和here,有很多好的概述网站可以阅读.
简而言之,它们通过某种类型的HTTP请求启动连接,然后在客户端和服务器之间建立直接的TCP双向连接.
维护客户机的开放式套接字需要一些服务器开销,因此,如果您预期同时会有上万个这样的套接字,那么您必须确保您的服务器基础设施能够达到这样的规模.CPU负载只与在任何给定时间有多少插槽处于繁忙状态成正比,因为空闲插槽不占用任何CPU.
使用WebSocket是否需要服务器成本?
这真的取决于你把它和什么做比较.WebSocket通常用于服务器需要能够在数据可用时向客户端发送数据(通常称为"服务器推送").使用连续连接的webSocket的通常替代方法是让客户端反复轮询,反复询问服务器是否有任何新内容.如果您将webSocket与重复的客户端轮询进行比较,那么webSocket通常是非常非常高效的,并且使用webSocket可以比使用频繁轮询的客户端更高地扩展服务器.
服务器可以正确配置为支持数十万个同时(且大部分是空闲)的webSocket连接,这样服务器的可扩展性限制就受到您发送到所有这些连接的客户端的流量的限制.如果你每隔几秒钟就向一个客户端发送数据,并且你有数十万个已连接的客户端,那么使用任何技术都需要大量的服务器马力(和带宽),而WebSocket可能仍然比任何竞争技术都要好.但是,如果与webSocket连接的客户机大多处于空闲状态,并且数据只是偶尔发送给它们,那么webSocket实现可以进行大规模高效扩展.
以下是关于该主题的其他参考资料:
Websockets and scalability
websocket vs rest API for real time data?
Websocket vs REST when sending data to server
Ajax vs Socket.io
Why to use websocket and what is the advantage of using it?
HTML5 WebSocket: A Quantum Leap in Scalability for the Web
Push notification | is websocket mandatory?
Comet库试图支持类似WebSocket的接口,即使没有直接的WebSocket支持.当它试图通过保持一个开放的HTTP连接来模拟一个双向TCP套接字时,一些低效的黑客开始出现在这里.如果您使用的是真正的WebSocket,这不是问题.