[英]Scaling websocket node server
我知道之前已经部分地问过这个问题( How to Scale Node.js WebSocket Redis Server? ),但我想知道是否有任何替代 redis 可以在节点实例之间快速共享 websocket 对象,特别是 ws 类型的套接字( https:// github.com/einaros/ws )。 我尝试过 redis 并遇到了 Web 套接字对象是循环的且难以序列化的问题。 然后我使用了 Crockford 的 cycle.js ( https://github.com/douglascrockford/JSON-js/blob/master/cycle.js ),但是它似乎去掉了 websocket 对象方法,因为我从节点收到错误说在我从 redis 读回套接字并对其进行回收后,“对象对象没有发送方法”。 任何帮助将非常感激。
提前致谢,詹姆斯。
海事组织,你应该为此使用消息队列。.例如(RabbitMQ)
因此,您所需要做的就是将消息传递队列放入您的体系结构(RabbitMQ,ZeroMQ)等中
有一个库可以轻松在node.js进程和机器之间扩展WebSocket,您可以签出:
当我们谈到可扩展性时,我们期望或希望听到线性性能提升这两个词。 老实说,尽管大多数设置并非如此,因为它们对另一台服务器/服务的依赖太大,因此在您尝试为用户托管的网络中形成了瓶颈。
当我们探索选项时,我们会听到诸如数据库、消息队列和代理之类的东西; 这些很好用,但如上所述,如果对它们中的任何一个过于依赖,你肯定会破坏你的设置。
将 WSS 服务器设计为单独运行(除非超出要求)。 您确定并设置限制,并让 API 服务器知道这一点。 因此,如果我有 10 个聊天室,并且它们最多可容纳 100 个用户,并且将我的 WSS 服务器放在板凳上证明我可以容纳 400-500 个用户。 有了这些信息,我会为每台服务器设置 4-5 个房间。 因此,如果两个人进入房间#1,他们就在 WSS 服务器#1 上; 如果所有 10 个聊天室都已满,那么 WSS 服务器 #2 现在已满,第 11 个房间将需要一个 WSS Server#3 直到第 15 个房间。
网络中最慢的部分现在只是您的 API 服务器处理请求,但这也可能包括数据库。
如果您的要求是比示例更多的用户,您可以首先增加核心能力或在 MQ 或 Redis Pub/Sub 类型设置的帮助下添加第二个服务器。
不幸的是,没有办法正确地对用户进行排序,所以如果 3 个房间有 20 个用户并且所有用户都坐在 WSS 服务器#1 上,那么仍然会留下一个有数百个用户槽可用的房间,但这真的是一个问题吗?
这个房间有可能会被填满,所以让他们留在原地,但仍然可能需要几天时间才能达到最大,因此根据您的需要编写一些辛辣的东西将提高您制作它的成本效益。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.