我用go语言写了个websocket,但如何实现100万连接,并且部署在多台服务器,连接与连接之间可以互相通信
我用go语言写了个websocket,但如何实现100万连接,并且部署在多台服务器,连接与连接之间可以互相通信
可以用个MQ来做中转,这样就无限扩展。
1、WS订阅自己服务器名称的主题的消息
2、用户登录成功后分配一个存活的WS服务器
3、WS Client连接成功后写入REDIS,用户所在的服务器。
4、A与B用户不在同一时服务器时直接投递至MQ,MQ如果没有投递成功就写入历史未读消息。
主要有以下的优点:
无限扩展
跨区域部署
BGP自动分流
7 回答4.8k 阅读
6 回答6.6k 阅读✓ 已解决
1 回答5.8k 阅读✓ 已解决
2 回答3.5k 阅读✓ 已解决
1 回答5.5k 阅读✓ 已解决
1 回答4.8k 阅读✓ 已解决
4 回答1.8k 阅读
是100万个连接,他们会被分配到多台服务器上,然后要求连上服务器的不同连接之间可以相互通信,你这是在做即时通讯吧。
那就在服务器之间,加一个连接,让三个服务器之间能交换数据,共享它们的连接信息。
比如A客户端连接在服务器S1 上,B客户端连接在服务器S2上。A给B发送消息的时候,如果S1发现它的连接列表里面没有B的连接,那就去其他服务器上查询,如果查询到有,S1就把消息发送给S2,然后S2发送给B。(基本上涉及到集群的都是类似这种方式),好像带集群功能的应用大多都是这样实现的。
还有其他的方法,客户端在连接的时候,就根据算法,算出来要去连接哪一台服务器。后面其他客户端如果要发消息给某个客户端,就能根据一样的算法,算出这个客户端连接那个服务器,也能达到一样的效果。(感觉这个方法比较挫) ,有点像redis的集群。