go语言websocket,如何实现100万连接,并且部署在多台服务器,用户的channel还可以互相通信?

我用go语言写了个websocket,但如何实现100万连接,并且部署在多台服务器,连接与连接之间可以互相通信

阅读 1.6k
3 个回答

是100万个连接,他们会被分配到多台服务器上,然后要求连上服务器的不同连接之间可以相互通信,你这是在做即时通讯吧。

那就在服务器之间,加一个连接,让三个服务器之间能交换数据,共享它们的连接信息。

比如A客户端连接在服务器S1 上,B客户端连接在服务器S2上。A给B发送消息的时候,如果S1发现它的连接列表里面没有B的连接,那就去其他服务器上查询,如果查询到有,S1就把消息发送给S2,然后S2发送给B。(基本上涉及到集群的都是类似这种方式),好像带集群功能的应用大多都是这样实现的。

还有其他的方法,客户端在连接的时候,就根据算法,算出来要去连接哪一台服务器。后面其他客户端如果要发消息给某个客户端,就能根据一样的算法,算出这个客户端连接那个服务器,也能达到一样的效果。(感觉这个方法比较挫) ,有点像redis的集群。

你可以创建多个网关websocket服务,多个网关之间通讯,可以交给代理服务,所有网关连接到代理服务。

新手上路,请多包涵

可以用个MQ来做中转,这样就无限扩展。
1、WS订阅自己服务器名称的主题的消息
2、用户登录成功后分配一个存活的WS服务器
3、WS Client连接成功后写入REDIS,用户所在的服务器。
4、A与B用户不在同一时服务器时直接投递至MQ,MQ如果没有投递成功就写入历史未读消息。

主要有以下的优点:
无限扩展
跨区域部署
BGP自动分流

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏