有很多很好的概述网站可以阅读有关 websocket 一般如何工作的信息,例如here http://en.wikipedia.org/wiki/WebSocket and here http://blog.teamtreehouse.com/an-introduction-to-websockets.
简而言之,它们通过某种类型的 HTTP 请求发起连接,然后,它们是客户端和服务器之间的直接 TCP 双向连接。
维护与客户端的开放套接字会产生一些服务器开销,因此如果您预计同时有数万个套接字,则必须确保您的服务器基础设施能够满足这种规模。 CPU 负载仅与任意给定时间繁忙的套接字数量成正比,因为空闲套接字不占用任何 CPU。
使用 WebSocket 是否会产生服务器成本?
这实际上取决于您将其与什么进行比较。当服务器需要能够在数据可用时向客户端发送数据(通常称为“服务器推送”)时,通常会使用 webSocket。使用持续连接的 webSocket 的通常替代方法是让客户端重复轮询,一遍又一遍地询问服务器是否有新内容。如果将 webSocket 与重复的客户端轮询进行比较,那么 webSocket 通常效率更高,并且与频繁轮询客户端相比,使用 webSocket 可以将服务器扩展得更高。
服务器可以正确配置为支持数十万个并发(并且大部分是空闲的)webSocket 连接,这样服务器的可扩展性限制就受到发送到所有这些连接的客户端的流量的限制。如果您每隔几秒就向客户端发送数据,并且有数十万个已连接的客户端,那么使用任何技术都将需要大量的服务器马力(和带宽)才能做到这一点,而 webSockets 仍然可能比任何技术都要好竞争技术。但是,如果 webSocket 连接的客户端大多处于空闲状态并且只是偶尔向它们发送数据,那么 webSocket 实现就可以大规模且高效地扩展。
以下是有关该主题的一些其他参考资料:
Websocket 和可扩展性 https://stackoverflow.com/questions/47268038/websockets-and-scalability/47269221#47269221
websocket 与 REST API 的实时数据比较? https://stackoverflow.com/questions/28613399/websocket-vs-rest-api-for-real-time-data/28618369#28618369
向服务器发送数据时 Websocket 与 REST https://stackoverflow.com/questions/45460734/websocket-vs-rest-when-sending-data-to-server/45464306#45464306
Ajax 与 Socket.io https://stackoverflow.com/questions/30319618/ajax-vs-socket-io/30334848#30334848
为什么要使用websocket以及使用它的优点是什么? https://stackoverflow.com/questions/44898882/why-to-use-websocket-and-what-is-the-advantage-of-using-it/44899221#44899221
HTML5 WebSocket:Web 可扩展性的巨大飞跃 http://www.websocket.org/quantum.html
推送通知 | websocket 是强制的吗? https://stackoverflow.com/questions/31035467/push-notification-is-websocket-mandatory/31042439#31042439
Comet 库尝试支持类似 WebSocket 的接口,即使没有直接的 WebSocket 支持。这就是低效黑客开始出现的地方,因为它试图通过保持开放的 HTTP 连接来模拟双向 TCP 套接字。如果您使用真正的 WebSocket,这不是问题。