Is Socket.io Ideal for chat module
我正在开发一个基于 Angularjs 和 Node.js 的应用程序。这是一个基于组织的应用程序。在这个应用程序中,我必须实现聊天功能。众所周知,Socket.io 是即时通讯应用程序及其可靠性的最佳解决方案。但除此之外,我对 Socket.io 几乎没有任何疑问。据我了解,当我们使用套接字编程(在我的情况下为 Socket.io)时,它为每个连接保留一个端口。如果组织的规模太大怎么办?它会起作用吗?在服务器端,我使用 Express js。 Socket.io 会在服务器上产生额外的负载吗?
我应该选择 Socket.io 还是 HTTP?
谢谢。
- 您认为单台服务器需要支持多大的规模(同时连接的用户)?而且,你有什么理由使用集群吗?而且,在任何给定的时间内,有多少客户会同时发送或接收聊天?
-
@_jfriend00,这取决于组织的规模。这可能会有所不同。是的,你是对的,如果组织规模很大,我不会使用单个服务器或小型服务器。
-
那你的问题没有意义。当然,这项技术会奏效。它会以您想要的规模工作吗?这完全取决于您想要的规模以及您愿意部署的硬件以及用户将使用哪种类型的负载模式。既然您不愿意为这些要求中的任何一个提供答案,那么您的问题确实无法回答。是的,该技术可以在一定规模、一定负载和一定硬件部署下发挥作用。
-
如果您要求将其与轮询 HTTP 客户端进行比较,那么轮询是对资源和可扩展性的巨大浪费,因为大多数时候,您的服务器所做的只是响应它没有数据的轮询请求。这就是 webSocket/socket.io 的全部意义——您可以直接将数据推送到客户端,而无需客户端轮询。不活动的套接字不消耗服务器 CPU 和少量内存。服务器可以配置为同时处理数十万个套接字,并且可以集群化。
-
@_ jfriend00 我最初的疑问是: HTTP 的负载会更少还是 Socket.io 会更少?在其中我需要一个很重的配置?
-
@_ jfriend00,现在我清楚了,谢谢你的回复。
-
webSocket(socket.io 所基于)的发明是因为它比 HTTP 轮询实时响应时间更有效。如果 HTTP 轮询在这种情况下更有效,我们一开始就不会使用 webSockets。
HTTP 轮询任何类型的交互时间都是非常低效的。您将有数以万计的客户反复询问您的服务器,"您有什么新东西要给我吗?"并且服务器会定期响应"不,还没有"。
webSockets(socket.io 用作传输)的发明正是因为它们比 HTTP 轮询更有效地进行两种交互通信。
现代服务器可以配置为同时处理数十万个 webSocket 连接。在您的应用程序的实际工作中,您的一台服务器实际上可以处理多少个服务器取决于许多因素,您在问题中都没有透露这些因素。但是,对于双向聊天来说,选择 webSocket/socket.io 并不是一个糟糕的架构选择——这就是发明这种应用程序的目的,因为它通常比 HTTP 轮询更好。
请参阅以下参考资料:
使用 Websockets 代替 RESTful HTTP 有哪些陷阱?
Ajax 与 Socket.io
这种技术栈可以扩展吗?
HTML WebSockets 是否为每个客户端维护一个开放的连接?这可以缩放吗?
AWS 上使用 Node.js 的 600k 并发 websocket 连接
具有 1M 并发连接的 Node.js!
HTML5 WebSocket:Web 可扩展性的巨大飞跃
使用 Socket.io。今天,它与聊天模块等高度交互的应用程序非常相关。使用 Web 套接字,只要相关用户正在向 Web 服务器注册服务,就没有协商协议并且连接保持打开状态。负载明显小于 http/https 协议。
-
我明白你的意思,现在feathers JS也是一个非常著名的实时应用程序框架,它在后台使用了Socket.io。
对于初学者来说,使用 socket.io 聊天非常容易理解和集成。但是,带宽量在很大程度上取决于您要从服务器发送的数据量,以及客户端将发送的数据量。带宽使用还取决于您使用的 Socket.IO 传输方式以及应用程序的心跳间隔。
应用程序的性能影响还因您运行的应用程序类型以及您的机器和/或网络的性能能力而异。但是,无论您的计算机功能如何,5000 个客户端都会对性能产生相当大的影响,除非您跨多个内核扩展应用程序。
您可以参考此链接了解更多详情。链接