开发者社区> zhuweisky> 正文

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

简介: 前面我们已经多次提到,每个AS都有一组FS为之服务(回顾),AS将接收到的功能请求通过Tcp连接池 或Remoting转发给某个FS处理。下面我们将深入讨论AS和FS之间的通信机制。    首先要解决第一个问题,AS如何知道每个为之服务的FS的地址?    最常见的一种解决方案是,AS处的配置文件中有一个FS地址列表,AS每次启动时,就读取这个列表,然后与列表中的每个FS建立Tcp连接池。
+关注继续查看

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18695 0
ESFramework介绍之(32)―― Tcp客户端核心组件关系图
如果你的客户端基于ESFramework构建,并使用Tcp与服务端通信。通过这篇文章你将知道如何迅速、高效地创建客户端应用。    ESFramework对基于Tcp客户端的支持主要在ESFramework.Network.Tcp.Passive命名空间,下图给出了该命名空间中的核心组件,以及这些组件之间的关系:    下面解释一下这些组件的作用、职责。
863 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25091 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20420 0
基于C/S的4层架构 —— ESFramework介绍之(6)
ESFramework的4层结构的4层分别是:客户端(Client)、应用服务器(AS)、功能服务器(FS)、数据库服务器。它们之间的联系图示意如下:    FS (FunctionServer),功能服务器,处理并且仅处理所有的功能性请求,不参与用户管理、状态保持等,提供最纯粹的功能服务。
912 0
DotNet IOC Framework - Microsoft Unity介绍
一. 新建一个ASP.NET MVC4项目 二. 安装Microsoft Unity   1) 管理Nuget程序包     2)安装Unity3程序包     在你的App_Start文件夹里会多出来两个文件   三.
974 0
grafana 开源图标系统 & InfluxDB 介绍。
1,开源图表系统grafana grafana提供的监控列表效果非常的漂亮。直接部署在nginx上面就行,使用node.js 实现的数据抓取。 http://grafana.org/ demo页面: http://play.grafana.org/ 这个报表展示可以跑在 Graphite, InfluxDB & OpenTSDB. 监控的数据库上面。 其中InfluxDB
1490 0
+关注
zhuweisky
从事软件开发行业十多年,专注于网络通信技术和网络语音视频技术,擅长系统架构设计、系统性能优化等。zhuweisky.cnblogs.com
300
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载