使用 WebSocket 是否会产生服务器成本?

2024-05-10

我已经离开了 PHP/MySQL 的舒适区,因为语法/封装/过程的东西可能会让人沮丧。

上周,我开始尝试并按照一些教程使用 Node.js/Socket.IO 创建实时聊天应用程序。到目前为止,我从未使用过 WebSockets 做过任何事情,它们看起来真的很酷——服务器和客户端之间的即时通信非常棒。

现在,请原谅我在这里缺乏理解,但是 HTTP 的设置是为了让您不应该能够在客户端和服务器之间保持连接打开——而我对 Comet 的初步理解是,它强制连接保持打开状态永远不会终止写入流,只发送 NUL 字节。这听起来……服务器密集型。

那么 WebSocket 是如何工作的呢?如果我的聊天应用程序同时有几百人,服务器不会超载吗?当我在服务器上使用 PHP/MySQL 时,服务器一次只处理一个请求 - 如果我使用 AJAX 和轮询,比如说,每一秒一次,我想它会迅速升级,因为你会有数千个请求每分钟请求数。

我的问题是,WebSockets 是否可以扩展到大型应用程序?如果没有真正的高带宽服务器,这是否实用?

我想这可以归结为:频繁间隔的 AJAX 轮询、Comet 和 WebSocket 之间是否存在显着的服务器负载/用户体验差异?

Thanks!


有很多很好的概述网站可以阅读有关 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,这不是问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 WebSocket 是否会产生服务器成本? 的相关文章

随机推荐