ESFramework介绍之(14)-- AS与FS通信方案

    前面我们已经多次提到,每个AS都有一组FS为之服务(回顾),AS将接收到的功能请求通过Tcp连接池 或Remoting转发给某个FS处理。下面我们将深入讨论AS和FS之间的通信机制。

    首先要解决第一个问题,AS如何知道每个为之服务的FS的地址?
    最常见的一种解决方案是,AS处的配置文件中有一个FS地址列表,AS每次启动时,就读取这个列表,然后与列表中的每个FS建立Tcp连接池。这种方案很容易实现,但是有很多缺点。最主要的是当动态的添加/移除FS时,都需要修改AS配置文件中的FS地址列表,而且当FS的IP发生变化时,也需要修改这个列表。所以这个列表的维护是相当麻烦的。
    ESFramework全力支持的是另一种非常灵活的方案,在这种方案中,AS的配置文件中不用保存任何FS的信息,为AS服务的FS的地址都是在运行时由FS自己通知给AS的。这样,在动态的添加/移除FS时,AS及其配置文件不用作任何变动。我们知道,AS和FS之间的所有功能通信是通过TCP连接池进行的,在这种情况下,AS是主动联系FS。而AS和FS之间的非功能通信通过Remoting或WebService的方式来完成,即当FS启动时,将自己的地址信息通过AS发布的远程服务接口告诉给AS,然后AS再根据这个地址去与FS建立TCP连接池。在非功能通信中,是FS主动联系AS,所以FS不需要发布远程服务接口,FS只需要知道AS发布的远程服务的地址即可(通常这个服务地址记录在FS的配置文件中)。 

   需要解决的第二个问题是,当网络出现故障后恢复或服务器(AS或FS)重启后,AS与FS之间的连接池如何恢复?主要可分为下面三种情况讨论。
(1)第一种情况:当FS正常工作一段时间后重启:
      每次FS启动/重启时都向向AS发送“我启动了”的消息,这样AS就去主动与FS建立Tcp连接池或恢复已存在的连接池。

(2)第二种情况是AS重启:
      这中情况下有两种解决办法:一是在FS上加个按钮,当AS重启后,工作人员点击按钮,给AS发送“本FS启动了”的信息。二是FS通过Remoting定时给AS发送Check消息,当发生Remoting异常时,FS就知道AS掉线了。AS掉线后,FS就定时给AS发送“我启动了”的消息,直到AS重启完毕。ESFramework对第二种方式进行了全力的支持。

(3)第三种情况是网络断开后恢复:
      这种情况可以由Tcp连接池自动重连机制来解决。

       AS与FS之间的通信的两个主要问题都已经解决了,最后我还想额外补充一点,那就是关于“定时Check消息”的。在ESF平台上,有很多地方需要使用“定时Check消息”的机制,这种机制主要用于使对方确认消息发送者还在线上。比如,手机通过移动与我们的AS建立了Tcp连接,当手机掉线时,移动与AS之间的Tcp连接并没有断开,所以AS并不知道手机客户掉线了。所以,AS要求,手机每隔一定时间就要向AS发送“Check消息”以表明自己在线,如果在指定的时间间隔内,AS没有收到该手机的“Check消息”,则AS认为该手机已经不在线,马上断掉其对应的Tcp连接。上面的FS也定时向AS发送“Check消息”来表明自己一直在线。

       而在AS与IRAS之间,也采用了同样的机制。因为IRAS需要管理所有在线AS的地址,所以AS也是每次启动时向IRAS发送“本AS启动了”的信息,并定时向IRAS发送“Check消息”来表明自己一直在线。关于IRAS的作用的更细讨论,请关注下篇文章!

下一篇文章:ESFramework介绍之(15)-- IRAS

上一篇文章:ESFramework介绍之(13)-- 功能插件处理器工厂

转到  :ESFramework 可复用的通信框架(序) 

时间: 2024-07-30 01:55:36

ESFramework介绍之(14)-- AS与FS通信方案的相关文章

AS与FS通信实现 —— ESFramework介绍之(33)

    (本文部分内容只适合ESFramework V0.3+)     在ESFramework介绍之(14)-- AS与FS通信方案 一文中,我们讲到了AS与FS之间基本的通信方案,并且采取了一些策略来保证AS与FS之间的稳定通信.本文我们将给出AS与FS通信的两种实现,即基于Tcp连接池的通信实现和基于Remoting的通信实现.     我们已经知道,AS与FS之间的通信分为两类,一类是非功能通信,一类是功能通信.非功能通信指的是FS向AS注册.注销等通信,这种通信仅仅是FS主动联系AS

ESFramework介绍之(15)-- IRAS

    每个城市都对应着自己的AS,每个AS都有一组FS为之服务,而所有的AS都由一个IRAS联系/管理起来(回顾).前面我们已经提到,所有的FS都可以是动态添加/移除的,并且FS的地址也是自由可变的.同样,所有AS也都是可以动态添加/移除的,并且AS的地址也是可变的(这里AS与IRAS的机制同上文介绍的FS与AS之间的机制一样).但是,唯一不能随便变化的是IRAS的地址.这是因为,所有终端连的第一个服务器就是IRAS,然后从IRAS获取目的AS的地址,这样才去连接目的AS请求服务.所以,如果I

ESFramework介绍之(8)-- 客户端插件IPassiveAddin

    前文已经提到了,在IServerAgent的基础上,客户端也可以采用插件的结构形式,客户端插件需要实现IPassiveAddin接口.    我的想法是,当客户端主程序加载一个新的PassiveAddin时,可以在某个菜单的子Items上添加一项,当双击这个子菜单项时,则弹出该客户端插件提供的"业务操作窗体".这只是使用客户端插件的可行方式之一,你完全可以根据你的应用来决定使用形式.IPassiveAddin接口定义如下:  1     /// <summary> 

ESFramework介绍之(18)―― Tcp用户管理器组件

    当我们的应用中客户端与AS之间是通过Tcp进行通信的时候,通常,应用也要求管理所有在线的用户.这种管理至少包含以下几点:(1) 当用户上线时,记录上线时间(2) 当用户请求服务时,记录请求服务的时间.服务的类型.本次服务下载的数据量(3) 当用户下线时,记录下线时间.并把本次用户登录.请求服务过程中的所有信息持久化保存(如记录到数据库)     在ESFramework中,实现这种管理的是ITcpUserManager组件,通常,该组件由AS使用(因为在AS.FS.IRAS中只有AS是必

ESFramework介绍之(11)-- Tcp连接池管理器

    上文已经讲到,Tcp连接池管理器为我们的应用进行了很多复杂的管理,比如功能服务器的调度(实现FS的负载均衡).连接池的动态添加/移除.控制每个连接池的相关参数在UI上的显示等,并且连接池管理器与单个连接池拥有一样的接口ITcpPool.我们先回顾一下这个接口:   1     public interface ITcpPool 2     { 3         RentStreamResult RentTcpStream(int poolTypeKey ,int serviceKey 

ESFramework介绍之(13)-- 功能插件处理器工厂

    上文讲述的是AS中的基于连接池的消息处理器,现在我们把焦点转移到功能服务器FS上来,看看FS上消息分派的过程.当FS接收到到一个请求后,会从已加载的功能插件列表中选择一个合适的插件来处理这个消息,而每一个功能插件就相当于一个消息处理器.FS和AS的结构一致:    要注意的是,功能服务器FS上收到的所有消息都应该交给功能插件来处理,不存在其它的处理方式.这是使得FS"纯粹"的必须要求.上图已经很清楚的表示了功能插件处理器工厂的位置和作用.它借助插件管理器实现"工厂&q

ESFramework介绍之(9)-- 插件对(Addin Pair)调试“框架”

    使用ESFramework开发C/S(通常为4层.3层也没问题)应用,当需要增加一项新的业务时,我们需要做的仅仅是开发两个插件,一个是服务端的业务功能插件(FunAddin),一个是客户端插件(PassiveAddin),这两个插件合在一起称为Addin Pair.开发这两个插件,只需要关注于业务,而其它与业务无关的比如网络通信.加密.数据安全,都不用管.ESFramework很好的将这些关注点分离开来,使得写"业务"插件的程序员的工作变得非常单纯,在ESFramework介绍

ESFramework介绍之(10)-- Tcp连接池

    凡是带有"池"的,比如数据库连接池.对象池.缓冲区池(后面可以看到IBuffPool)等等,都是为了避免资源的反复创建/销毁所带来的开销.需要为哪些资源对象建立"池"了?这些资源对象通常符合下面几个特性:(1)在应用中需要反复的被创建/销毁.(2)创建/销毁的开销比较大(3)应用中给定时刻,对该资源对象的数量要求比较大(4)资源对象最好是无状态的(Stateless),这样方便直接复用     AS(回顾)将所有的功能服务请求转发给为该AS提供服务的FS群中

ESFramework介绍之(17)―― 支持漫游用户和跨区域功能请求

    对于漫游用户的支持和跨区域功能请求的支持是ESFramework最基本的目的之一(回顾),在详细讲述解决方案之前,先了解一下关于这个问题的上下文.    在我们前面讲述的4层C/S架构中,每个AS负责一块区域.比如上海AS负责处理所有目标城市为上海的功能请求和管理所有在上海AS上注册的用户(比如PDA用户或手机用户).如果一个本是在上海注册的用户出差来到了武汉,最方便的,他会连上武汉的AS,这样对于武汉AS来说,这个用户就是漫游用户了.    如果上海的用户登陆上了上海的AS,但是他需要