·您当前的位置:首页 > 技术教程 > Rtmp技术 >

[FMS]FMS流媒体环境applicaton.onConnect事件的用法

时间:2015-12-30 14:13酷播
[FMS]FMS流媒体环境applicaton.onConnect事件的用法,刚刚开始正式开发一个FMS项目了,好多东西要试验,调试,发现....也许以后看这些学习笔记会觉得可笑,可能会错漏百出

刚刚开始正式开发一个FMS项目了,好多东西要试验,调试,发现....也许以后看这些学习笔记会觉得可笑,可能会错漏百出..不过不管正确与否.发上来吧.也许可以让和我一样遇到这样问题的初学者少走我走过的弯路吧~

 

昨天把client连接到服务器后的事件处理想复杂了.原来还担心加载外部数据不同步和同时联边用户太多的话会不会造成client管理的混淆.看来是太多余了.

关于FMS的服务端的client对象的处理机制今天仔细做了下试验.发现,当一个client联接到application实例时,系统是分配给这个client一个唯一ID值的.而且在运行事件application.onConnect()时,在这里边如果写加载对象XML或LoadVars,这些对象对是针对这个client的,不用担心在XML或LoadVars对象在加载数据中异步而造成client管理混乱的事情发生.我现在这样理解,当一个client连接到application实例时,系统给这个client一块地,client在这块地里做的事不会影响到别的client.

证明这个试验的代码:

  1. function getEach(obj){ 
  2.  
  3.        trace("遍历对象:") 
  4.  
  5.        for(o in obj){ 
  6.  
  7.               trace(o+" = "+obj[o]) 
  8.  
  9.        } 
  10.  
  11. } 
  12.  
  13. lvArr=new Array() 
  14.  
  15. cArr=new Array() 
  16.  
  17. application.onConnect = function(clientObj, userName, PSW, userType,conID) { 
  18.  
  19.               trace("登陆中>>"+userType+"  "+userName+"\r"); 
  20.  
  21.               
  22.  
  23.               //读取数据库 
  24.  
  25.               var loadLV = new XML(); 
  26.  
  27.               
  28.  
  29.               trace("比对加载对象是否相等") 
  30.  
  31.               lvArr.push(loadLV) 
  32.  
  33.               
  34.  
  35.               for(l in lvArr){ 
  36.  
  37.                      trace(loadLV+"   \r") 
  38.  
  39.                      trace(loadLV==lvArr[l]+"   "+l) 
  40.  
  41.               } 
  42.  
  43.               cArr.push(clientObj) 
  44.  
  45.               trace("客户端对象是否相等") 
  46.  
  47.               for(c in cArr){ 
  48.  
  49.                      trace(clientObj==cArr[c]) 
  50.  
  51.                      
  52.  
  53.               } 
  54.  
  55.               //loadLV.conID=conID 
  56.  
  57.               clientObj.conID=conID 
  58.  
  59.               loadLV.onLoad = function(suc) { 
  60.  
  61.               ///////////////////////////////////////////////////////////////// 
  62.  
  63.                      if (suc) { 
  64.  
  65.                          trace("成功.") 
  66.  
  67.                             getEach(this.firstChild.attributes) 
  68.  
  69.                             if(clientObj.conID==0){ 
  70.  
  71.                                    application.rejectConnection(clientObj) 
  72.  
  73.                             }else{ 
  74.  
  75.                                 application.acceptConnection(clientObj) 
  76.  
  77.                             } 
  78.  
  79.                      }else{ 
  80.  
  81.                             trace("加载失败,") 
  82.  
  83.                             application.rejectConnection(clientObj) 
  84.  
  85.                      } 
  86.  
  87.                      trace(this.conID+" LV?=client "+clientObj.conID) 
  88.  
  89.                      
  90.  
  91.               }; 
  92.  
  93.               //检测用户?userName=5945&PSW=5945 
  94.  
  95.               var pStr = "?userName="+userName+"&PSW="+PSW+"&userType="+userType+"&conID="+conID; 
  96.  
  97.               var loadingURL = "http://dxxd.web160.hezuwang.net/temp/toFMS.asp"+pStr; 
  98.  
  99.               //var loadingURL = "http://localhost/iletaoMusic/ASP/toFMS.asp"+pStr; 
  100.  
  101.               loadLV.sendAndLoad(loadingURL, loadLV, "post"); 
  102.  
  103.            getEach(loadLV) 
  104.  
  105.               getEach(clientObj) 
  106.  
  107. }; 
  108.  
  109.   

 

通过加载成功后参数对比是相同的.

也就是说,application.onConnect被触发时,是为每一个client生成了一个独立的运行空间.在这个事件里处理和生成的对象也是独立在这个事件处理函数里的.并不会混淆.包括从远程加载回的数据.也不会返回到混淆的地方去.昨天的担心是多余的.

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器