好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

xnet通讯简述.ppt

28页
  • 卖家[上传人]:n****
  • 文档编号:92816509
  • 上传时间:2019-07-13
  • 文档格式:PPT
  • 文档大小:352.50KB
  • / 28 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • XNet通讯简述,,目录,Xnet原理概述 XNet开发关注点 单XNET服务器 XNET日志分析; XNET服务器级联,一、XNet原理概述,XNET原理概述-1,XNET是我公司自主开发的通讯中间件: 采用TCP/IP通讯协议,长连接,异步方式; 功能: 建立,断开连接,发送接收数据; 支持逻辑寻址,编程时不需考虑对方地址,支持单播,多播的发送方式; 发送中自动压缩; 联机检测,发现断连可自动重连; 支持XNET服务器多层级联; 支持数据优先级设置;,XNET原理概述-2,所有使用XNET通讯的程序要求采用TXNetData打包; XNET报文结构: 系统区+用户区 系统区由18位固定长度的包头: Source\0 + Target\0 + Title\0 + Mark\0 XNET逻辑名称:xnet通讯时寻址的主要依据,逻辑名必须唯一; 对于XNET服务器本身,服务器逻辑名是域名(域名为启动xnet时的配置名如xnetd boc 12300,域名即为boc); 对于XNET客户端(使用xnet通讯的程序),逻辑名(终端名)为“域名.应用逻辑名”,应用逻辑名对于后台应用进程是写在配置文件或者固化在代码中(该类程序一般不能起多个),而对于客户端,一般都会有很多客户端同时登录,一般由服务器自动分配;,XNET原理概述-3,Xnet内部逻辑名称可用来判断数据返回路径,对程序员而言,该名字能简洁地辨识出数据的来源和去向,便于查看日志;(故要求程序员在命名程序的逻辑名时注意要能简洁地标识当前程序) 从xnet日志看,用xxx@00.00.00.00:111 来表示,xxx是xnet逻辑名称,用点号分开,00.00.00.00是IP地址,111是端口号(端口号随机分配),逻辑名和ip、端口做了绑定, xnet根据逻辑名可发送信息给相应客户端, XNET寻址:支持逻辑寻址和title寻址,我们一般常用的还是title寻址;,XNET原理概述-4,Title命名规则: Dot分割连续数字字母,大小写敏感,严禁使用空格和除通配符(*,)外的其它特殊字符; 一般目前我们使用title结构是“应用名.机构名.交易名”(如Ps.00012.Deal) 单域通配符(*),如Ps.*则Ps.Deal等可匹配,但不能匹配Ps.Deal.Fx;后者需通过多域匹配符()来实现; XNET发包类型: 单播:XNET服务器将该包转发给关注该包的第一个连接; 多播: XNET服务器将该包转发给关注该包的所有连接; 返回包:XNET客户端A将收到的包,反馈给发该包的连接,此时XNET服务器直接将Source和Target调换,无需通过title寻址;,XNET原理概述-5,基于Title进行逻辑寻址; 请求者(发包方)和响应者(收包方)均通过配置ip,端口连接到xnet服务器; 响应者连接上XNet后,注册Title(SetCommand设置为xcRegTitle,SetData方法打包注册title字符串),向XNET注册关注的title,可多个,支持通配; 请求方构造TXNetData对象,调用SetData属性设置包内容,SetTitle方法设置包Title,SetCommand方法设置包类型(单播,多播),进行发送; Xnet服务器收到单播或广播包后,转发给注册该Title的连接(即响应者);,XNET原理概述-6,XNET级联拓扑图,二、开发关注点,开发关注点-1,做好Title规划: 开发前事先规划好项目需要有多少个XNET,是否需部署级联(级联可分散XNET压力); 后台应用间,后台应用和客户端间注册Title需清晰区分开; 后台应用间,后台应用和客户端间发送xnet包,通讯时,发包title按目的应用的title设置; 如: 存在后台应用app1,app2分别注册title:app1.;和app2.; 客户端appc1,注册title: appc1.; 则app1发包给app2,则可发送app2.的包; app2发包给客户端appc1,则可发送app2.的包;,开发关注点-2,切忌让客户端注册服务端的title,可以不注册title尽量别注册; 注册title忌过于冗长,降低寻址速度,也不便于运营维护; 注册Title的动作在XNET LoginOK后再发起; 养成在处理xnet包前,判断返回码是否为0,过滤异常包的好习惯;,三、单XNET服务器,XNET收发数据流程-单XNET-1,配置XNET服务器: [boc] Level=5 OnlineCheckSecond=10 OnlineEchoSecond=10 LocalTitle= 配置客户端(后台应用) [app1] Address=127.0.0.1 Port=12300 ConfigName=app1 RegTitle=app1.;Bas.Effect; [app2] Address=127.0.0.1 Port=12300 ConfigName=app2 RegTitle=app2.; Bas.Effect;,XNET收发数据流程-单XNET-2,1.启动XNET服务器 服务名+ 配置名(对于xnet也同时是逻辑名)+ 端口 xnetd boc 12300 2.启动后台应用app1,app2连接到xnet服务器; 从xnet日志来看(以下仅app1日志,app2类似), 13:47:25 Accept 127.0.0.1:50511 13:47:25 boc.app1@127.0.0.1:50511 login 13:47:25 boc.app1 titles: app1.; Bas.Effect; app1已经连接到xnet服务器(boc)下 App2也连到同一个xnet下,两者即可通过xnet来进行通讯 3.启动客户端appc1,注册appc1.;,XNET收发数据流程-单XNET-3,1.单播: 从客户端appc1模拟发送签到包给后台应用app1处; title使用app1.45129.login,单播发送; 伪代码如下: xnet::TXNetData *xnetData = xnet::TXNetData::NewObject(); string strTitle = “app1.45129.login”; xnetData-SetTitle(strTitle.c_str()); xnetData-SetCommand(xnet::xcTitle); lang::XStream ar; ar SetData(ar.str(),ar.size()); XSocket -SendData (xnetData);,XNET收发数据流程-单XNET-4,2.返回包: 后台应用接到客户端签到请求,返回机构列表给客户端; 伪代码如下: xnetData- SetReturnCode(rc); // 设置返回码 xnetData-ExChange(); // 源,目的调换 lang::XStream ar; ar SetData(ar.str(),ar.size()); XSocket -SendData (xnetData);,XNET收发数据流程-单XNET-5,3.多播: 客户端修改参数后,做参数生效,通知后台应用重新加载参数; title使用Bas.Effect,多播发送; (app1,app2均能生效) 伪代码如下: xnet::TXNetData *xnetData = xnet::TXNetData::NewObject(); string strTitle = “Bas.Effect”; xnetData-SetTitle(strTitle.c_str()); xnetData-SetCommand(xnet::xcMutiTitle); lang::XStream ar; ar SetData(ar.str(),ar.size()); XSocket -SendData (xnetData);,四、XNET日志分析,XNET日志分析-1,1、日志分级: 当Level=N时,记录N级别以内(包括N级)的所有信息。

      1- Error,错误信息,记录系统错误信息及其它重要信息 2- Normal,正常信息,记录连接、断连情况 3- Debug,调试信息,记录系统数据收发情况 4- XNet,XNet内部信息,记录更多连接状态变化情况 5- XNetDebug,XNet调试信息,记录更多XNet用调试信息 4、5级只要是为xnet调试用的,应用系统的Level配置一般用2、3就足够了XNET日志分析-2,2、登陆和断连: 客户端连接到本xnetd 该客户端重复注册:名字 relogin (同一客户端注册两次) 同IP重复连接,新覆盖旧:旧连接名 xnetd is replaced by 新连接名 (抛出异常 “config name is not uniqe“) 不同IP的重复连接,不允许覆盖:名字 in use (不同IP同configname报: 192.168.10.122:2883 in use) 没有空闲的自动分配的名字:名字 login failed, term limit 成功注册:名字 login, titles: xxxx 成功注册:名字 login, titles: {xxxx}, groups: {xxxx} 成功注册:名字 login 注册title:源名字 titles: xxxx 注销title:源名字 DelTitle, now titles: xxxx 断连:名字 closed,XNET日志分析-3,2、级联时的登陆和断连: 本xnetd登陆到远程xnetd 成功返回信息:名字 login remote, titles: xxxx 成功返回信息:名字 login remote 错误时:(connect failed 错误码 其它xnetd连接到本xnetd 重复连接:名字 relogin 对方没有配置名字:名字 xnetd need name 同IP重复连接,新覆盖旧:旧连接名 xnetd is replaced by 新连接名 (xnet.b1@127.0.0.1:59254 xnetd is replaced by 127.0.0.1:64247) 不同IP的重复连接,不允许覆盖:名字 in use 登陆成功:名字 xnetd login, titles: xxxx 登陆成功:名字 xnetd login 断连:名字 closed,XNET日志分析-4,3、转发数据: 这里的长度指数据区长度,数据区长度+系统区长度=数据包总长度 单播包 发送:Send 源名字=目标名字 (Title)长度 没找到目标:Back 源名字 (Title)长度 多播包(广播包查看日志时看不到具体的广播流向,需结合之前当时连接的xnet客户端和广播次数来推测数据流向) 找不到需要该title的连接:源名字 needless to say (title)长度 多播成功:源名字 broadcast (title)长度 多播个数 times 返回包 发送:Ret 源名字=目标名字 (Title)[返回码]长度 没找到目标:Drop 源名字 (Title)[返回码]长度,XNET日志分析-实例,1.xnet连接,签到,注册;(xnet监控工具) 2.断连; 3.单播模拟(客户端向后台应用签到);(title规划混乱导致数据流向混乱模拟) 4.单播返回模拟(签到返回); 5.多播(多播无人接收模拟); 6.自动重连;,五、XNET服务器级联,XNET服务器级联-1,boc为xnet根节点,boc.hb为xnet的子节点,boc和boc.hb构成简单的级联结构; 级联时,根节点和子节点互为xnet服务器和客户端;(级联域名必须以dot分割,子节点的RemoteAddress和RemotePort需配置成根节点的相关ip和端口) 如存在以下配置的。

      点击阅读更多内容
      相关文档
      云南省红河州河口县语文二年级下学期期末试题+2020-2021学年.pdf 八年级生物开学摸底考(人教版)(答题卡).pdf 云南省文山州砚山县数学四年级下学期期末试题 2020-2021学年 (2).pdf 八年级生物开学摸底考(辽宁专用)(答题卡).pdf 八年级生物开学摸底考(海南专用)(答题卡).pdf 云南省昆明市五华区数学四年级第二学期期末考试 2020-2021学年.pdf 八年级生物开学摸底考(南京专用)(答题卡).pdf 八年级生物开学摸底考(湖南专用)(答题卡).pdf 云南省德宏州语文五年级下学期期末试题 2020-2021学年答案zq.pdf 八年级生物开学摸底考(武汉专用)(答题卡).pdf 2022年盐城市中考化学试卷答案.pdf 云南省德宏州语文四年级下学期期末试题 2020-2021学年.pdf 云南省德宏州数学四年级下学期期末试题 2020-2021学年.pdf 云南省德宏州数学五年级下学期期末试题 2020-2021学年数学答案zq.pdf 八年级生物开学摸底考(福建专用)(答题卡).pdf 八年级生物开学摸底考(全国通用)(答题卡).pdf 八年级生物开学摸底考(广西专用)(答题卡).pdf 八年级生物开学摸底考(广州专用)(答题卡).pdf 云南省昆明市盘龙区数学四年级第二学期期末考试 2020-2021学年.pdf 云南省昆明市盘龙区语文二年级第二学期期末考试 2020-2021学年(人教部编版无答案PDF).pdf
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.