如果你要用统一的域名进行连接,那就不能用这种方案(这也是我觉得方案二不太行的原因之一) Q:APP下载后怎么知道要连哪个IP? 不能根据地理位置获取,如果这样的话,一端A给另一端B发消息的时候,服务器是不知道B在哪里的,所以只能根据客户端的唯一ID+算法来判断去连那个服务器。 借用 redis hash槽的图  假设现在有 服务器S1 IP 11.11.11.11 域名 s1.conn.simple.com 服务器S2 IP 12.12.12.12 域名 s2.conn.simple.com 服务器S3 IP 13.13.13.13 域名 s3.conn.simple.com 客户端 xiaoming123 客户端 xiaozhang124 客户端 xiaowang125 有一个特定的算法: 伪代码 def Connect_to_where(client_name): hash_value = hash(client_name) result = hash_value % 3 + 1 domain = "s" + str(result) + ".conn.simple.com" return domain #这里会返回拼接后的域名 当 xiaoming123 要连接服务器的时候,执行一下这个函数 Connect_to_where("xiaoming123") ,这个时候xiaoming123根据hash的结果,去连接"s3.conn.simple.com" 同样的,xiaowang125 要连接服务器的时候,也执行这个函数,得到:"s1.conn.simple.com" 假如 xiaoming123 要给 xiaowang125 发送消息,服务器收到消息之后,发现消息要传递给xiaowang125 时,也执行这个函数 Connect_to_where("xiaowang125"),服务器就能得到 xiaowang125 应该在那个服务器上。 === 这个方案不行的原因是这样的,假如你服务器增加或者减少的时候,客户端的hash算法不能及时更换,结果hash到的数据可能会有问题,到时候会有问题。 === 可以试试,在客户端连接到任意一个服务器的时候,程序自己维护一个表,记录当前实例有连接着那些客户度,然后在需要的时候,查询一下表。