当前位置: 首页 > 面试题库 >

实施可扩展聊天服务器的策略

公西承
2023-03-14
问题内容

我正在寻求实现某种聊天服务器。我希望它可以扩展。这似乎是一个很大的问题,所以我想我希望答案是方向指针,有点探索性。

最终用户客户端是Web或电话客户端。我认为某种Websocket实现,例如Socket.IO很好。

在服务器端,我希望使用Node.js。我希望该体系结构具有可伸缩性,以使用户数量不受限制(嗯,在一定范围内,预计不会有很大的成功机会,如果是这样,则由更聪明,经验丰富的人来进行工作是合理的)而不是目前仅由我编码)希望每个聊天室的用户数不受限制,或者可能是固定的大数目。这意味着我需要使用Node中编写的多个服务器进行水平扩展。

假设一些负载均衡器(希望将来不会出现单点故障,但我不知道如何实现,或者可能只是转移到AWS)正在从最终客户端向聊天服务器调度SocketIO连接。连接到不同服务器的不同用户可能位于同一房间,因此消息需要发送到其他服务器。

我将如何切实可行地实现这样的目标?希望不会太复杂。

问题:(1)如果所有服务器都需要处理所有消息,因为用户可以通过任何一台服务器登录,是否可以扩展?(2)我是否需要某种消息队列以便服务器之间进行对话?Rabbitmq的Pub-
sub可用于此吗?或者,如果为zeromq,我将如何扩展pub sub?Zeromq指南包含有关使用REQ /
REP类型的应用程序扩展到多台服务器的说明。但不是Pub Sub。(3)还是应该从XMPP开始?

我希望它尽可能容易地工作。


问题答案:

Socket.io网站上有一个很好的解释。看一下

  • http://socket.io/docs/using-multiple-nodes/

建议使用Nginx作为HTTP负载平衡器,使用Node.js集群(具有粘性会话),并使用Redis作为消息后端。

我认为,仅使用给定的模块和配置机制,几乎不需要编写任何代码就可以实现您的目标。



 类似资料:
  • 假设某个负载均衡器(希望将来不会出现一个故障点,但我不知道如何实现这一点,或者可能只是转移到AWS)正在将SocketIO连接从终端客户机分配到聊天服务器。不同的用户连接到不同的服务器可能在同一个房间,因此需要将消息发送到其他服务器。 我如何可行地实现这样的东西?希望不要太复杂。 问题:(1)如果所有服务器都需要处理所有的消息,因为用户可以通过任何服务器登录,这是否可以扩展?(2)服务器之间是否需

  • 主要内容:服务端程序,客户端程序本节将带领大家结合咱们前面所学的知识开发一个聊天的示例程序,它可以在几个用户之间相互广播文本消息。 服务端程序 服务端程序中包含 4 个 goroutine,分别是一个主 goroutine 和广播(broadcaster)goroutine,每一个连接里面又包含一个连接处理(handleConn)goroutine 和一个客户写入(clientwriter)goroutine。 广播器(broa

  • 本文向大家介绍Node.js实现简单聊天服务器,包括了Node.js实现简单聊天服务器的使用技巧和注意事项,需要的朋友参考一下 使用Nodejs是如此简单的实现了一个简单的聊天服务器 实现代码如下: 使用过程就是: 启动js 连接方式:telnet

  • 描述演示策略实施特性的任务 开启限流。这个任务展示如何使用Istio来动态限制到服务的流量

  • 我正在使用PHP,MySql和Node.js(socket.io实时聊天)像facebook这样的聊天应用程序。问题是当20个人开始聊天时,我的服务器负载会上升到10-15。我只是在发送方插入消息,并向接收方发送消息ID,接收方从数据库检索消息信息。我有一个Centos服务器有4个物理和4个逻辑核心(共8个核心)和16GB内存。我的网站是在zencart中构建的,当我在静态页面上按f5 1分钟时,

  • 我需要在netty中有一个客户机/服务器通信,用于我的项目目的之一。所以我刚开始用一个handsOn来改进,我正在学习netty,我是一个初学者。 我尝试了一个简单的客户端服务器与Netty聊天。 客户端和服务器正在初始化,我可以看到服务器能够获得用于建立连接的客户端管道,但是当客户端发送消息时,它没有进入ServerAdapterHandler的messageReceived部分。下面是我的源代