前面我们已经多次提到,每个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 可复用的通信框架(序)

ESFramework介绍之(14)-- AS与FS通信方案相关推荐

  1. ESFramework介绍之(16)―― Tcp数据自动发送器ITcpAutoSender

    我们已经积累了这样的经验:如果有一个大块的数据需要通过Tcp发送,我们会采用异步的方式以避免当前工作线程阻塞.那么,如果我们有多个线程需要同时发送大块的数据了?每个线程都在NetworkStream或 ...

  2. ESFramework介绍之(34)―― ITcpServerAgent和IUdpServerAgent组件关系图

        (本文适用于ESFramework V0.3+) 在ESFramework介绍之(7)-- 服务器代理IServerAgent(2006.06.06修正) 的介绍中,我们已经认识了IServe ...

  3. ESFramework介绍之(31)―― 消息分类及对应的处理器

        这是一篇迟到了很久的文章,要不是今天看到Mediar朋友写的"基于ESFramewok的 客户端和客户端通迅"的文章,我也许还不会想起写这篇应该很早就发表的Blog,它可以 ...

  4. ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy

        (本文适用于ESFramework V0.2+) 现在我们回想一下,当网络组件(Tcp/Udp组件)接收到一个消息后,这个消息会流经哪些组件,然后再通过网络组件发送出去了.如果你研究过ESFr ...

  5. ESFramework介绍之(23)―― AgileTcp

    前面已经介绍了ITcp接口,而AgileTcp就是ESFramework给出的ITcp的参考实现.在之前,我曾经讲解过模拟完成端口的Tcp组件实现和异步Tcp组件实现,在它们的基础之上,我更改了处理策 ...

  6. ESFramework介绍之(28)―― Udp组件

        ESFramework对Tcp和Udp协议都提供了完整的支持,在ESFramework介绍之(21)-- Tcp组件接口ITcp介绍 和 ESFramework介绍之(23)―― AgileT ...

  7. 七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法...

    七周三次课(1月24日) 10.11 Linux网络相关 10.12 firewalld和netfilter 10.13 netfilter5表5链介绍 10.14 iptables语法 ====== ...

  8. java串口发送十六进制数,本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下1.介绍使用Java实现的串口通信程序,支持十六进制数据的发送与接收。 源码:...

    本文实例为大家分享了Java实现串口通信的具体代码,供大家参考,具体内容如下 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的发送与接收. 源码:SerialPortDemo 效果图如下: ...

  9. 组件生命周期管理和通信方案

    随着移动互联网的快速发展,项目的迭代速度越来越快,需求改变越来越频繁,传统开发方式的工程所面临的一些,如代码耦合严重.维护效率低.开发不够敏捷等问题就凸现了出来.于是越来越多的公司开始推行" ...

最新文章

  1. Android ListView (多个adapter 说明)
  2. 怎么用javascript进行拖拽
  3. Hibernate二级缓存详解
  4. SQLSERVER2005登录时出错
  5. How Nokia both helped and hindered Microsoft's earnings
  6. cef js返回c++的代码_CEF3开发者系列之外篇——IE中JS与C++交互
  7. 华为正式发布鸿蒙智慧屏,5499 元、21999 元,2021 款华为智慧屏 V55/V85 明日 0 点正式开售:搭载鸿蒙系统...
  8. fastjson php,Fastjson 对象或数组转JSON
  9. cad批量打印快捷键_批量打印CAD图(无删减版)
  10. python实现压缩,解压文件,使用密码解压文件。
  11. 趋势移动或者移动应用2012
  12. 服务器系统访问量统计,通过网站统计或系统监视器查看IIS并发连接数
  13. 软件设计师-计算机网络(刷题笔记)
  14. 微信早安定时推送 简单方法教程(windows通用)
  15. 电影html css页面,纯CSS3构建的电影屏幕效果
  16. Apache Durid (HDFS原理 特性 读写测试 集群部署 架构设计)
  17. Primer Premierv6.24详细图文安装和破解教程
  18. Windows远程连接工具有哪些
  19. 苹果手机进水屏幕乱跳怎么办
  20. 2015最具成长性、发展力的创新互联网公司100佳

热门文章

  1. LeetCode - Easy - 28. Implement strStr()
  2. python 列表间隔取值_python list数据等间隔抽取并新建list存储的例子
  3. ulead gif animator_搞笑GIF趣图:这风看来很大啊,今天回不来家了7
  4. Android Canvas的drawText()和文字居中方案
  5. 科目三电子路考哪些情况会被评判不合格
  6. 谷歌地图VS苹果地图:大数据领域竞争
  7. 程序员第一定律:关于技能与收入
  8. 小波在图像视频压缩领域中的应用分析【转贴】
  9. GitKraken - 简单教程
  10. Prime Distance POJ - 2689 线性筛