<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[羽柴|鬼铃-blog - FMS]]></title>
<link>http://www.ycflash.com/</link>
<description><![CDATA[网页游戏开发,云南游戏开发,云南flash,昆明游戏开发,昆明flash,FMS3,FMS3教程,Flash Media Server]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[yuchaiyuwei@163.com(羽柴|鬼铃)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>羽柴|鬼铃-blog</title>
	<url>http://www.ycflash.com/images/logos.gif</url>
	<link>http://www.ycflash.com/</link>
	<description>羽柴|鬼铃-blog</description>
</image>

			<item>
			<link>http://www.ycflash.com/article.asp?id=118</link>
			<title><![CDATA[flashplayer10.1.53.64 最新版无法连接FMS]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Mon,05 Jul 2010 23:40:32 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=118</guid>
		<description><![CDATA[今天刚升了flashplayer10.1.53.64 结果FMS的cal客户端，客户端无响应。。。 解决方法：未知 待查中。。<br/><br/>找到问题所在了，新版本FP 取消了对中文代码的解析。。。 像我这样用全中文写程的人 命苦。。。]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=115</link>
			<title><![CDATA[[附图]用户列表的实现纠正[新手必看]]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Sat,12 Jun 2010 17:31:18 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=115</guid>
		<description><![CDATA[因为看到有人在群里面讨论用户列表的实现， 虽然一个简单的用户列表。但说法各异，在此就写一个简单的思路教程吧。推荐FMS应用的新手必看<br/><br/>用户列表，相信很多应用都会用到。像FMS经常做的聊天室， 网络游戏都有用户列表。虽然用户列表看似简单，但实现却不简单。 在此我先把错误的思路及方法说下吧<br/><br/>很多新手做用户列表都是用非常简单的方式。 建立一个数组 连入用户时.push这个数组并且把这个数组广播给客户端，断开用户的时候。找到数组中的位置splice掉。 然后又把这个数组广播给客户端。 这个方法虽然能行，但却是大错特错的方法。除非是小应用还可以用下，用这方法别想做大应用。问题在哪?&nbsp;&nbsp;我下面来分析<br/><br/>问题就出在数据量上面，这样来考虑。如果是一个2000人在线的应用，那这个用户列表就相当于长度2000的数组。如果随便1个人进进出出就相当于广播了2000次左右。如果这个数组记录的仅仅是人名还问题不大，但如果还有其他数据。那可想而知...一进一出就刷2000人的长度2000的数据量，是多么可怕的数据量....相当于发送了2000*2000的数据量<br/><br/>那如何解决呢？就是建立用户列表映射。看以下思路. 同样还是2000人的应用<br/>服务端同样用数组。 当用户登录时只向该用户发送长2000数组（在此分清，是只向登录者这1个人发送并不是向2000人广播这数组）&nbsp;&nbsp;这样就把用户列表映射到登录者客户端。服务端push后这时候再广播登录者信息（注意，在此指的是广播登录者的单独的单元信息比如用户名而不是广播整个数组。） 客户端在收到这个单独信息的时候也做push。 当用户退出的时候服务端做splice处理，处理完后记录splice的数组指针即可。 然后广播这个指针。客户端同步映射根据这个指针做splice处理。（而不是把整个数组的广播扔给客户端）&nbsp;&nbsp;这就是整个映射过程。<br/><br/>这样就相当于只向1个人（登录者）发送了2000长度的数组。而广播的仅仅是要push的信息和删除的ID 而不是向所有用户发送整个数组。这样2000人的应用效率就降低成了1/2000。 <br/><br/>我现在用FMS开发的RPG游戏及以之前开发IU富亨及IU猜谜屋。包括以前开发的14款棋牌游戏都是用的这方法。<br/>具体的代码开发工作比较忙就不再单独写了，只要看懂思路后会发现非常简单。 <br/><br/>同理在开发网络游戏中这样的情况很多见了，为了降低网络流量很多地方都得做数据印射（客户端和服务端各持一份）。比如游戏中的地图数据组，装备数据组等等。并且映射后不影响数据安全，客户端只管显示。核心判断还是在服务端。所以就算映射后在客户端被用户修改那也只是修改他自身的显示而不影响其他正常用户的显示。<br/><br/><br/><span style="color:Red">今天附上一张图片说明，如果图片过宽显示不完全。请另存后看。</span><br/><img src="http://www.ycflash.com/attachments/month_1007/4201072014047.jpg" border="0" alt=""/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=112</link>
			<title><![CDATA[FMS的eval不支持动态数组的指向解决方法]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Mon,03 May 2010 11:09:53 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=112</guid>
		<description><![CDATA[今天开发时又发现fms的一个Bug. 不支持eval的字符串指向数组. 在flash中同样的代码移值到FMS中就不行了.<br/><br/>如:<br/>a=new object()<br/>a.b=[111,222]<br/>这时候用eval(&#34;a.b.0&#34;)&nbsp;&nbsp;FMS就报错了. <br/>当然因为我用到的是动态数组路径,这种情况比较特殊. 一般路径如果是已知的直接用 this[&#34;a&#34;][&#34;b&#34;][0]或<br/>a.b[0] 就直接指向了.正因为路径是动态,所以得关联字符串用eval则报错. <br/><br/>解决方法如下:<br/><br/>ponitArr=[&#34;a&#34;,&#34;b&#34;,&#34;0&#34;]<br/>head =this<br/>for (var i = 0; i&lt;ponitArr.length-1; i++) {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head = head[ponitArr[i]];<br/>}<br/>trace(head[ponitArr[ponitArr.length-1]])<br/>用遍历的方法取到数组倒数第2层的引用.再动态引用就直接能操作该数值了.<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=111</link>
			<title><![CDATA[关于FMS广播broadcastMSG致死问题纠正]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Tue,16 Feb 2010 12:05:52 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=111</guid>
		<description><![CDATA[前段时间有人向我问起FMS中的 broadcastMSG，一直认为是bug。还找来了网上的贴子说其他人也认为是bug。但我不这样认为，那是在误导。我平时应用广播都是几百线程都没发现有问题过。于是又写了一个简单的测试broadcastMSG的实例，用服务器同时广播万条压测正常。<br/><br/>当然如果用 broadcastMSG去广播NC，那肯定挂。那本来就是错误的应用方法。不光是用broadcastMSG如果用单call也是很占资源。所以在编写代码时应该考虑什么数据该发，什么数据不该发.而不是为了一个变量而把整个obj或数组发出。<br/><br/>测试程序下载：<br/><img src="http://www.ycflash.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.ycflash.com/attachments/month_1002/3201021612357.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=108</link>
			<title><![CDATA[循环的优化]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Sat,27 Jun 2009 22:52:19 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=108</guid>
		<description><![CDATA[//在写程的时候遇到较大较多数数据用循环处理时,注意优化.做了这样一个测试.<br/>特别是针对数组,我们经常见到 for(var i=0;i&lt;xxx.length;i++)这样的方法.<br/>当然如果该数组长度小,套用的循环层级不深次数少时可以用这样的方法.而遇到数量多时推荐用个变量来存放.<br/>var iLength = 数组.length;<br/>for (var i = 0; i&lt;iLength; i++) {<br/>}<br/>这样的方法可以大大优化代码运算可用我下面的测试代码可以看出,特别是针对服务端的运算,更是推荐.<br/>不要小看那么的几毫秒,但针对的用户运算成千上万次运算时就知道优化的重要性了<br/>(注意:此方法只限用于在循环中数组长度不改变的前提下.)<br/><br/>测试数组 = new Array(10000);<br/>开始时间 = getTimer();<br/>for (var i = 0; i&lt;测试数组.length; i++) {<br/>&#160;&#160;&#160;&#160;测试数组[i] = i;<br/>}<br/>结束时间 = getTimer();<br/>时间差 = (结束时间-开始时间);<br/>trace(时间差);<br/>//<br/>开始时间 = getTimer();<br/>测试数组 = new Array(10000);<br/>var iLength = 测试数组.length;<br/>for (var i = 0; i&lt;iLength; i++) {<br/>&#160;&#160;&#160;&#160;测试数组[i] = i;<br/>}<br/>结束时间 = getTimer();<br/>时间差 = (结束时间-开始时间);<br/>trace(时间差);]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=106</link>
			<title><![CDATA[Flash Media Server_2 中文帮助]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Mon,25 May 2009 13:37:07 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=106</guid>
		<description><![CDATA[上传了一份FMS2的中文帮助，给需要的人下载吧<br/><a target="_blank" href="http://www.ycflash.com/down/Flash_Media_Server_2_Help.rar" rel="external">点击此处下载</a><br/><br/><br/>上面那个链接是包含PDF阅读器的，近40M。如果有PDF阅读器的请下载下面的。3M<br/><a target="_blank" href="http://www.ycflash.com/down/FMS2HelpJJ.rar" rel="external">点击此处下载</a>]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=94</link>
			<title><![CDATA[FMS录像小程序[源码]]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Wed,08 Apr 2009 16:15:17 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=94</guid>
		<description><![CDATA[今天群里面有人问起FMS录像. 3年前写过一份小程序。现在扔出来给大家研究吧，不过当时是用MX2004写的。如果是用FLASH8打开得另存一下。压缩包里面我另存了一份flash8版的 <br/><br/><img src="http://www.ycflash.com/images/download.gif" alt="下载文件" style="margin:0px 2px -4px 0px"/> <a href="http://www.ycflash.com/attachments/month_0904/u200948161429.rar" target="_blank">点击下载此文件</a><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=86</link>
			<title><![CDATA[转贴:FMS无法启动的另一个杀手]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Thu,17 Jul 2008 15:45:53 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=86</guid>
		<description><![CDATA[2次出现这样的问题, 所以把大猴子的这贴转过来.<br/>出处:<a href="http://25swf.blogbus.com/logs/10019430.html" target="_blank" rel="external">http://25swf.blogbus.com/logs/10019430.html</a><br/><br/>如果你发现你的FMS无法启动,无法运行所有的APPLICATION,你可以打开你的FMS日志,地址是<br/>Program Files\Macromedia\Flash Media Server 2\logs\<br/>打开 master.00.log 这个文件,如果你在其中发现有这样一句<br/>MS has detected system time is going backwards; shutting down server<br/><br/>那么就很幸运的,本文对你有一定的帮助作用.<br/>找到 C:\Documents and Settings\All Users\Application Data\Macromedia\FMS<br/>这里有一个 名字为空的文件,删除它,然后再重试启动的的FMS..可能一切就会恢复以前了.<br/><br/>一般产生这种结果的原因是因为你修改过系统的时间,导致FMS以为你想修改系统时间来作假.从而锁定了FMS...<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=80</link>
			<title><![CDATA[FMS异步与其他web语言达成异步验证]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Mon,29 Oct 2007 18:53:33 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=80</guid>
		<description><![CDATA[如做到 FLASH 输入账号 密码去取得数据库中的数据， 目前需要.net 或php做中转。方法有sendandload和WebService较为常用（目前AS2&nbsp;&nbsp;AS3本人不熟不知道能否直接与数据沟通）。 但大家假想，如果用FLASH客户端直接去从取。如果页面地址暴露将会有什么后果。。不能想都知道。<br/>最理想的处理方法则是 用FLASH 把账号，密码传给FMS，让FMS去做和数据库登录验证的工作。这样才能达到最安全的机制.如下图的验证机制。<br/><img src="http://www.ycflash.com/attachments/month_0710/g20071029184048.gif" border="0" alt=""/><br/>从图上可以看出，验证的主要还是由.net和php做验证。FMS只是做了把账号密码中转了一次。但这样做法有很大用途。这样让玩家无法得取.net的处理页面具体地址。要想知道就得把FMS服务器给黑了才知道，比起写在FLASH客户端用破解软件要安全的多得多。特别是现在FLASH破解软件满天飞的时代<br/><br/>但sendandload和WebService的处理方式是异步的，要经过访问和返回的步骤。特别在网络不佳的时候还有等待的处理。下面的例子用sendandload来简单说明怎么处理异步的FMS验证操作。 <br/><br/>=========FMS端========<br/>function userLogin(_newClient,usrName,usrPwd){<br/>&#160;&#160;&#160;&#160;trace(&#34;用户登录&#34;)<br/>&#160;&#160;&#160;&#160;thisObj=this<br/>&#160;&#160;&#160;&#160;//用户登录GameLogin() &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;var Login = new LoadVars()<br/>&#160;&#160;&#160;&#160;Login.onLoad = function(success) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (success) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if (this.usrOkFlag == &#34;ok&#34;) {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;trace(usrName+&#34;登录成功&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;application.acceptConnection (_newClient);<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//取数据过程<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_newClient.myData=this.data&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//发送给客户端，登录成功。让它初始<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;_newClient.call(&#34;init&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;} else {<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;application.rejectConnection (_newClient, &#34;登录失败!&#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;};&#160;&#160;&#160;&#160;<br/>&#160;&#160;&#160;&#160;sendUrl=&#34;<a href="http://www.xxx.com/xxx.aspx?usrName=" target="_blank" rel="external">http://www.xxx.com/xxx.aspx?usrName=</a>&#34;+usrName+&#34;&amp;usrPwd&#34;+usrPwd+&#34;&amp;&#34;<br/>&#160;&#160;&#160;&#160;Login.sendAndLoad(sendUrl, Login, &#34;GET&#34;);<br/>&#160;&#160;&#160;&#160;//&#160;&#160;&#160;&#160;<br/>}<br/><br/>application.onConnect = function(newClient,usrName,usrPwd) {<br/>&#160;&#160;&#160;&#160;userLogin(newClient,usrName,usrPwd)&#160;&#160;&#160;&#160;<br/>};<br/>//<br/><br/>大家可以看到 在登录的时候去调用一个function 把 new LoadVars() 写在该函数中。这样同时N人进入，<br/>他会自动处理多个function。而每个function中就是一个new LoadVars。并把处理的结果调回了相应的function中达到异步的接受事件.<br/>//=====================================<br/>//<br/>//转载请注明出处：羽柴 鬼铃-blog&nbsp;&nbsp;www.ycflash.com/blog<br/>//<br/>//=====================================]]></description>
		</item>
		
			<item>
			<link>http://www.ycflash.com/article.asp?id=78</link>
			<title><![CDATA[FMS大厅建房及自动分组]]></title>
			<author>yuchaiyuwei@163.com(admin)</author>
			<category><![CDATA[FMS]]></category>
			<pubDate>Fri,26 Oct 2007 01:32:49 +0800</pubDate>
			<guid>http://www.ycflash.com/default.asp?id=78</guid>
		<description><![CDATA[之前一直忙啊忙的都没时间弄自己的东西和写BLOG了，终于告一段落了。虽然手上还有N个项目等着开发，但今天在整理debug的时候发现原来我开发大厅建房和分组机制上原来有一个不好的误区 所以也拿出来和大家分享及讨论。虽然我之前的开发一直没出现特殊问题，但今天仔细考虑后。其实是种不方便扩展和不易维护的方式。<br/><br/>我的现实方法就是都通过FMS 做管理和分组<br/>客户端&nbsp;&nbsp;&nbsp;&nbsp; 服务端：room(app)&nbsp;&nbsp;DDZ(用斗地主app举例)<br/>用客户端先去访问room，room有个数组，用来记录每场游戏的开始与否状态及人数。 room判断当前这个客户端该分配到哪一个房间 call回客户端，让客户端直接去连DDZapp 。 DDZapp每进入一个人向room call一次，当游戏开始也call&nbsp;&nbsp;为了让room更变记录的各房间的数组信息。&nbsp;&nbsp;一般来看逻辑是无问题，在实际应用中也没出现过问题。<br/><br/>但实际上这是种不良好的方式，这样主动权就变在客户端了。1 客户端一旦被破译反编，别人想建房就建。room起不到相应的作用。2&nbsp;&nbsp;room没有一个主导权做为维护和管理。 他只是被做为一个引路者的感觉。<br/><br/>经过考虑后，应该改为如下方式。<br/>room管理每个游戏APP，客户建房或分组先提交给room&nbsp;&nbsp;room去连接app（app限制初次连入者只许可room）。建房成功返回room&nbsp;&nbsp; room进行分组，或更变自身房间数组信息。假如是自动分组，所有的玩家在room中等待，由room直属分配给app。 <br/><br/>这样将来游戏是要建房机制 还是自动分组机制 更换起来比较方便。<br/>//=====================================<br/>//<br/>//转载请注明出处：羽柴 鬼铃-blog&nbsp;&nbsp;<br/>//&nbsp;&nbsp;&nbsp;&nbsp; www.ycflash.com/blog<br/>//<br/>//=====================================]]></description>
		</item>
		
</channel>
</rss>
