问题描述
现在做的一个C#写的C/S内网聊天的软件,想考虑做成集群,资料说用memcached做集群,希望大家能给出思路。现在问题是这样,C1想与C2通信,但是如果出现C1的消息发给了S1,C2的消息发给了S2,这样怎么实现2个C端的通信,有资料说用一个中转服务器只负责监控SESSION状态,请问具体应该怎么实现,包括方法,所用到的技术,工具等。第一次发帖,有点语无伦次,希望大家指证和教导,非常谢谢!
解决方案
解决方案二:
1)就是Socket通信,做一个Server,然后所有的Client都连接到Server,然后Client发送消息给Server,Server转发给其他Client。2)写Socket的时候,要考虑到Client端的数量,不同的数量,采用不同的模型去写,你可以去百度里面找“socket通信模型”,一共有5种。3)通信协议。自己去定义。
解决方案三:
服务器(包括远程)集群需要有一个统一的任务调度系统。当一个处在广西的服务器收到一个用户C1的消息,目标是发给C2一个聊天消息,它首先要高速地查询系统上C2连在哪一个服务器上,例如在位于新疆的一台服务器上,然后它就会发一条消息给整个集群的一个Master服务器(因为新疆的这台服务器在“国中之国”的某个NAT网关之后,无法直接访问,而所有这类服务器都连在Master上双向通讯),然后Master就会把消息推送到新疆的这台服务器上。实际上,服务器不仅仅可以在公网上,也完全可以在局域网里边。只要它们全都连在Master服务器上,就能形成一个服务器联邦。而这个Master服务器通常也是可以通过“服务器选举”而自动选择的(以便处理受到攻击、宕机等情形)。
解决方案四:
你可以按照这个方向,自己找资料。你所看到的“memcached做集群”跟这个业务集群的控制逻辑设计无关,是用作内存数据库(或者也被许多人叫做缓存——外部的)的功能。而所谓“中转服务器只负责监控SESSION状态”大概也只是考虑到单个服务器(单个S、多个C),而不是多个服务器的场景。是低一层的设计。如果你设计不出来集群任务系统,那么就先搞一个“单服务器”或者“主-从热备”结构的双服务器IM架构,这比较简单。
解决方案五:
S与S之间的通讯信令,远比S与C之间的通讯信令简单多了。也许只是1:100的关系。但是当你有服务器集群,需要创建一个简单而独立的服务器集群的任务分发系统,才能玩儿起来集群。绝不是拿着c-s的设计思路去玩儿s-s系统。
解决方案六:
谢谢您二位提供的思路和讲解,很受用。自己在这条路上确实还差的很远。