<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>无风的港湾 &#187; 属性</title>
	<atom:link href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7/feed" rel="self" type="application/rss+xml" />
	<link>http://www.5bay.cn</link>
	<description>让你我停泊~</description>
	<lastBuildDate>Fri, 16 Dec 2011 09:18:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Android在线开发工具 App Inventor</title>
		<link>http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html</link>
		<comments>http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html#comments</comments>
		<pubDate>Wed, 29 Jun 2011 06:20:36 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[Android笔记]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[幸福]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[组件]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=578</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html"><img align="left" hspace="5" width="150" src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/projects.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>最近在博客园看到一篇报道关于一个人好像是别出心裁的用android程序求婚，最后成功了，在留言部分看到很多园友说：好浪漫，好幸福；文章中提到的一个在线开发程序，叫做app invertor，于是在网上稍微看了一下，下班回到家之后马上下载，起先是用迅雷下载的，结果下载进度一点也不动，于是乎，***用IE9 下载，下载了两次没有成功，原因可能是保存路径有问题，建议先保存到桌面，然后再安装，下载地址如下http://dl.google.com/dl/appinventor/installers/windows/appinventor_setup_installer_v_1_2.exe（建议***）；下载好之后安装就可以了，好像官方建议安装过程中的路径不要修改，以防在加载模拟器的时候找不到路径，当然你也可以自己定义路径，不过在使用模拟器的时候需要人工的输入模拟器的路径，以后就不会出现这种问题了，下面就可以进入按android的在线编辑页面了，请在浏览器的地址栏中输入：http://appinventor.googlelabs.com/ 就可以看到了，先放图··· 第一次进入是会出现下面的界面，请点击new，并填写相应的项目名称即可，我填写的是First 进入First项目，界面如下 &#160; 整个界面简洁，横向的可以分为四个部分，分别为palette（字典意思是调色板，就是工具），viewer（指示器），components（组件），properties（属性）； Palette：为我们所有将要用到的控件 Viewer：为android模拟器面板，可拖放控件至此 Components：Viewer中的空间都会在此显示其控件名称 Properties：当某个控件处于编辑状态时，显示其属性可编辑 下面建立我自己的第一个Demo 1.修改标题 2.拖放控件，修改属性 3.从本地上传文件 5.此时是图片正在上传图片，因为我们是在线编辑的，所以建议各位不要上传太大的图片 6.点击右上角的“Blocks Editor”按钮进入编辑界面，此时会显示正在下载，即从网站现在我们的程序，此时有可能会要求下载java6，点击下载即可，下载完成之后如果你的app inventor路径不是默认的，需要填写仿真器的路径 &#160; &#160; 7.连接本人的android2.2手机效果如下 &#160; 作者：神舟龙 出处：http://www.cnblogs.com/shenzhoulong/ &#160; 相关博文2010年05月23日 -- mysql优化及全文搜索 (0)2010年07月26日 -- PHP和Socket简介 (0)2010年07月26日 -- Ajax的工作原理 (1)2010年07月26日 -- AJAX的各种控件和类库 (0)2010年07月26日 -- 使用Ajax时的十个常犯的错误 (0)2010年07月26日 -- 基于JSON的高级AJAX开发技术 (0)2010年05月23日 -- Rsync详解 (0)2010年05月23日 -- 《高性能网站建设指南》读书笔记 (0)2010年07月28日 -- ASP防注入新方式，希望对大家是有用的 (0)2010年07月28日 -- [...]]]></description>
			<content:encoded><![CDATA[<div id="cnblogs_post_body">
<p>最近在博客园看到一篇报道关于一个人好像是别出心裁的用android程序求婚，最后成功了，在留言部分看到很多园友说：好浪漫，好幸福；文章中提到的一个在线开发程序，叫做app invertor，于是在网上稍微看了一下，下班回到家之后马上下载，起先是用迅雷下载的，结果下载进度一点也不动，于是乎，***用IE9 下载，下载了两次没有成功，原因可能是保存路径有问题，建议先保存到桌面，然后再安装，下载地址如下<a href="http://dl.google.com/dl/appinventor/installers/windows/appinventor_setup_installer_v_1_2.exe">http://dl.google.com/dl/appinventor/installers/windows/appinventor_setup_installer_v_1_2.exe</a>（建议***）；下载好之后安装就可以了，好像官方建议安装过程中的路径不要修改，以防在加载模拟器的时候找不到路径，当然你也可以自己定义路径，不过在使用模拟器的时候需要人工的输入模拟器的路径，以后就不会出现这种问题了，下面就可以进入按android的在线编辑页面了，请在浏览器的地址栏中输入：<a href="http://appinventor.googlelabs.com/">http://appinventor.googlelabs.com/</a> 就可以看到了，先放图···</p>
<p>第一次进入是会出现下面的界面，请点击new，并填写相应的项目名称即可，我填写的是First</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/projects.png" border="0" alt="" width="1000" height="528" /></p>
<p>进入First项目，界面如下<span id="more-578"></span></p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/1.jpg" border="0" alt="" width="1000" height="538" /></p>
<p>&nbsp;</p>
<p>整个界面简洁，横向的可以分为四个部分，分别为palette（字典意思是调色板，就是工具），viewer（指示器），components（<a href="http://www.5bay.cn/tag/%E7%BB%84%E4%BB%B6" class="st_tag internal_tag" rel="tag" title="标签 组件 下的日志">组件</a>），properties（<a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" class="st_tag internal_tag" rel="tag" title="标签 属性 下的日志">属性</a>）；</p>
<p>Palette：为我们所有将要用到的控件</p>
<p>Viewer：为android模拟器面板，可拖放控件至此</p>
<p>Components：Viewer中的空间都会在此显示其控件名称</p>
<p>Properties：当某个控件处于编辑状态时，显示其属性可编辑</p>
<p>下面建立我自己的第一个Demo</p>
<p>1.修改标题</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/2.jpg" border="0" alt="" width="1000" height="543" /></p>
<p>2.拖放控件，修改属性</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/3.jpg" border="0" alt="" width="1000" height="544" /></p>
<p>3.从本地上传文件</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/4.jpg" border="0" alt="" width="1000" height="328" /></p>
<p>5.此时是图片正在上传图片，因为我们是在线编辑的，所以建议各位不要上传太大的图片</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/5.jpg" border="0" alt="" width="758" height="112" /></p>
<p>6.点击右上角的“Blocks Editor”按钮进入编辑界面，此时会显示正在下载，即从网站现在我们的程序，此时有可能会要求下载java6，点击下载即可，下载完成之后如果你的app inventor路径不是默认的，需要填写仿真器的路径</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/6.jpg" border="0" alt="" width="321" height="141" /></p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/7.jpg" border="0" alt="" width="1000" height="489" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>7.连接本人的android2.2手机效果如下</p>
<p><img src="http://images.cnblogs.com/cnblogs_com/shenzhoulong/app%20inventor/20110525/8.png" border="0" alt="" width="236" height="447" /></p>
<p>&nbsp;</p>
</div>
<div id="MySignature">
<div>作者：<a href="http://www.cnblogs.com/shenzhoulong/" target="_blank">神舟龙</a></div>
<div>出处：<a href="http://www.cnblogs.com/shenzhoulong/" target="_blank">http://www.cnblogs.com/shenzhoulong/</a></div>
</div>
<p>&nbsp;</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeprn-asp-jpg.html" title="如何删除删不掉的”PRN.asp:.jpg”">如何删除删不掉的”PRN.asp:.jpg”</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeeeee-2.html" title="防止网卡被禁用的具体配置方法">防止网卡被禁用的具体配置方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html" title="innerHTML、innerText和outerHTML的用法">innerHTML、innerText和outerHTML的用法</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/android" title="android" rel="tag">android</a>, <a href="http://www.5bay.cn/category/android%e7%ac%94%e8%ae%b0" title="Android笔记" rel="tag">Android笔记</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/google" title="google" rel="tag">google</a>, <a href="http://www.5bay.cn/tag/%E4%B8%8A%E4%BC%A0" title="上传" rel="tag">上传</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%B7%A5%E5%85%B7" title="工具" rel="tag">工具</a>, <a href="http://www.5bay.cn/tag/%E5%B9%B8%E7%A6%8F" title="幸福" rel="tag">幸福</a>, <a href="http://www.5bay.cn/tag/%E6%88%90%E5%8A%9F" title="成功" rel="tag">成功</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%BB%84%E4%BB%B6" title="组件" rel="tag">组件</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何删除删不掉的”PRN.asp:.jpg”</title>
		<link>http://www.5bay.cn/server-building/eeprn-asp-jpg.html</link>
		<comments>http://www.5bay.cn/server-building/eeprn-asp-jpg.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 01:59:36 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[隐藏]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=525</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/eeprn-asp-jpg.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>一个用户的网站被挂马 很多以prn.开头的文件&#8230;这个文件其实是windows禁止建立的..但是可以在dos建立 所以在dos下用更改属性 结果不让改 然后想恢复权限 不让恢复 ，网站的跟目录被加了几个文件，怎么删也删不掉， prn.gupiao.asp prn.liuhe.asp com1.shouji.asp 或是COM2，COM8等文件主，   第一步：打开工具&#62;文件夹选项&#62;查看&#62;有一项为”隐藏受保护的操作系统文件(推荐)”,去掉其前边的钩,选中”显示所有文件和文件夹” 第二步：建立一个del.bat的文件 把以下代码黏贴进去&#8230; DEL /F /A /Q \\?\%1 RD /S /Q \\?\%1 然后要删那个文件就把那个文件拖进去即可&#8230;. 但是又遇到问题了&#8230;有一个顽固的&#8230;PRN.asp;.jpg 拖进去也删不掉&#8230;. 不过没问题 这个也可以删&#8230;先把这个文件的文件夹里的其他的文件备份&#8230; 然后把文件夹拖过去&#8230;^_^ 删了吧&#8230; 然后把备份的文件 拷回去 ok了 相关博文2010年05月23日 -- Rsync详解 (0)2010年07月28日 -- ASP防注入新方式，希望对大家是有用的 (0)2010年05月23日 -- mysql优化及全文搜索 (0)2011年06月29日 -- Android在线开发工具 App Inventor (0)2011年06月29日 -- 开源软件的盈利模式 (0)2011年06月29日 -- 资深设计师Tony Ventrice解析手机游戏开发的四个层次 (0)2010年07月26日 [...]]]></description>
			<content:encoded><![CDATA[<p>一个用户的网站被挂马 很多以prn.开头的文件&#8230;这个文件其实是windows禁止建立的..但是可以在dos建立</p>
<p>所以在dos下用更改属性 结果不让改</p>
<p>然后想恢复权限 不让恢复 ，网站的跟目录被加了几个文件，怎么删也删不掉，</p>
<p>prn.gupiao.<a href="http://www.5bay.cn/tag/asp" class="st_tag internal_tag" rel="tag" title="标签 ASP 下的日志">asp</a></p>
<p>prn.liuhe.asp</p>
<p>com1.shouji.asp</p>
<p>或是COM2，COM8等文件主，  </p>
<p>第一步：打开工具&gt;文件夹选项&gt;查看&gt;有一项为”隐藏受保护的操作系统文件(推荐)”,去掉其前边的钩,选中”显示所有文件和文件夹”</p>
<p>第二步：建立一个del.bat的文件 把以下代码黏贴进去&#8230;</p>
<p>DEL /F /A /Q \\?\%1</p>
<p>RD /S /Q \\?\%1<br />
然后要删那个文件就把那个文件拖进去即可&#8230;.</p>
<p>但是又遇到问题了&#8230;有一个顽固的&#8230;PRN.asp;.jpg 拖进去也删不掉&#8230;.</p>
<p>不过没问题 这个也可以删&#8230;先把这个文件的文件夹里的其他的文件备份&#8230;</p>
<p>然后把文件夹拖过去&#8230;^_^ 删了吧&#8230;</p>
<p>然后把备份的文件 拷回去 ok了</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html" title="Android在线开发工具 App Inventor">Android在线开发工具 App Inventor</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/me/kaiyuanruanjiandeyinglimoshi.html" title="开源软件的盈利模式">开源软件的盈利模式</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html" title="游戏数值公式的表象与本质">游戏数值公式的表象与本质</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeee389.html" title="无需输入密码登陆3389">无需输入密码登陆3389</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/asp" title="ASP" rel="tag">ASP</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%B7%A5%E5%85%B7" title="工具" rel="tag">工具</a>, <a href="http://www.5bay.cn/tag/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F" title="操作系统" rel="tag">操作系统</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/tag/%E9%9A%90%E8%97%8F" title="隐藏" rel="tag">隐藏</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/eeprn-asp-jpg.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>防止网卡被禁用的具体配置方法</title>
		<link>http://www.5bay.cn/server-building/eeeeeeee-2.html</link>
		<comments>http://www.5bay.cn/server-building/eeeeeeee-2.html#comments</comments>
		<pubDate>Wed, 28 Jul 2010 01:58:21 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[模板]]></category>
		<category><![CDATA[策略]]></category>
		<category><![CDATA[组件]]></category>
		<category><![CDATA[连接]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=523</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/eeeeeeee-2.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>防止网卡被意外禁用，这个对大家可能没有多大的用途，但如果你有服务器托管在外面，那可就有用了，如果你那天不小心点到了“禁用”，呵呵，那后果我就不用说了吧，你的服务器马上就跟你说拜拜了，而且必须进入机房去重新启用网卡才可以（我就碰到了这样的倒霉事啊）。 闲话不多说，下面说重点： 实现的方法，用组策略来实现。 　　步骤： 　　1、运行——》gpedit.msc 　　2、导航至：用户配置——》管理模板——》网络——》网络连接 　　3.1、找到“禁止启用/禁用 LAN 连接的组件”，设置为“已启用” 　　3.2、找到“启用/禁用 LAN 连接的能力”，设置为“已禁用” 　　3.3、找到“为管理员启用 Windows 2000 网络连接设置”，设置为“已启用” 　　4、运行——》gpupdate /force 　　你现在检查一下本地连接的属性，“禁用”按钮已经变成灰色的不可用状态，这下你再也不用担心意外点中，让你的服务器跟你说拜拜了。 相关博文2011年06月29日 -- Android在线开发工具 App Inventor (0)2010年07月26日 -- Ajax的工作原理 (1)2010年05月23日 -- Rsync详解 (0)2011年06月29日 -- 网上整理的android权限大全 (0)2010年07月28日 -- ASP防注入新方式，希望对大家是有用的 (0)2010年07月28日 -- 无需输入密码登陆3389 (0)2010年07月26日 -- php的文档句法(heredoc)]]></description>
			<content:encoded><![CDATA[<p>防止网卡被意外禁用，这个对大家可能没有多大的用途，但如果你有服务器托管在外面，那可就有用了，如果你那天不小心点到了“禁用”，呵呵，那后果我就不用说了吧，你的服务器马上就跟你说拜拜了，而且必须进入机房去重新启用网卡才可以（我就碰到了这样的倒霉事啊）。</p>
<p>闲话不多说，下面说重点：</p>
<p>实现的方法，用组策略来实现。</p>
<p>　　步骤：</p>
<p>　　1、运行——》gpedit.msc</p>
<p>　　2、导航至：用户配置——》管理模板——》网络——》网络连接</p>
<p>　　3.1、找到“禁止启用/禁用 LAN 连接的组件”，设置为“已启用”</p>
<p>　　3.2、找到“启用/禁用 LAN 连接的能力”，设置为“已禁用”</p>
<p>　　3.3、找到“为管理员启用 Windows 2000 网络连接设置”，设置为“已启用”</p>
<p>　　4、运行——》gpupdate /force</p>
<p>　　你现在检查一下本地连接的属性，“禁用”按钮已经变成灰色的不可用状态，这下你再也不用担心意外点中，让你的服务器跟你说拜拜了。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html" title="Android在线开发工具 App Inventor">Android在线开发工具 App Inventor</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/wangshangzhenglideandroidquanxiandaquan.html" title="网上整理的android权限大全">网上整理的android权限大全</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeee389.html" title="无需输入密码登陆3389">无需输入密码登陆3389</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E6%A8%A1%E6%9D%BF" title="模板" rel="tag">模板</a>, <a href="http://www.5bay.cn/tag/%E7%AD%96%E7%95%A5" title="策略" rel="tag">策略</a>, <a href="http://www.5bay.cn/tag/%E7%BB%84%E4%BB%B6" title="组件" rel="tag">组件</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/eeeeeeee-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax的工作原理</title>
		<link>http://www.5bay.cn/network-programming/ajaxeeee.html</link>
		<comments>http://www.5bay.cn/network-programming/ajaxeeee.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:50:59 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[status]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmlhttp]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[兼容]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[分页]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[常用]]></category>
		<category><![CDATA[应用程序]]></category>
		<category><![CDATA[引入]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[节点]]></category>
		<category><![CDATA[表格]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[说明]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=482</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/ajaxeeee.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>Ajax的核心是JavaScript对象 XmlHttpRequest。该对象在Internet Explorer 5中首次引入，它是一种支持异步请求的技术。简而言之，XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应，而不阻塞用户。 　　在创建Web站点时，在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能： * 动态更新购物车的物品总数，无需用户单击Update并等待服务器重新发送整个页面。 * 提升站点的性能，这是通过减少从服务器下载的数据量而实现的。例如，在Amazon的购物车页面，当更新篮子中的一项物品的数量时，会重新载入整个页面，这必须下载32K的数据。如果使用Ajax计算新的总量，服务器只会返回新的总量值，因此所需的带宽仅为原来的百分之一。 * 消除了每次用户输入时的页面刷新。例如，在Ajax中，如果用户在分页列表上单击Next，则服务器数据只刷新列表而不是整个页面。 * 直接编辑表格数据，而不是要求用户导航到新的页面来编辑数据。对于Ajax，当用户单击Edit时，可以将静态表格刷新为内容可编辑的表格。用户单击Done之后，就可以发出一个Ajax请求来更新服务器，并刷新表格，使其包含静态、只读的数据。 　　一切皆有可能！但愿它能够激发您开始开发自己的基于Ajax的站点。然而，在开始之前，让我们介绍一个现有的Web站点，它遵循传统的提交/等待/重新显示的范例，我们还将讨论Ajax如何提升用户体验。 原始的Ajax：直接使用XmlHttpRequest 　　如上所述，Ajax的核心是JavaScript对象XmlHttpRequest。下面的示例文章评价系统将带您熟悉Ajax的底层基本知识：http://tearesolutions.com/ajax-demo/raw-ajax.html。注：如果您已经在本地WebLogic容器中安装了ajax-demo.war，可以导航到http://localhost:7001/ajax-demo/raw-ajax.html， 　　浏览应用程序，参与投票，并亲眼看它如何运转。熟悉了该应用程序之后，继续阅读，进一步了解其工作原理细节。 　　首先，您拥有一些简单的定位点标记，它连接到一个JavaScriptcastVote(rank)函数。 function castVote(rank) { var url = “/ajax-demo/static-article-ranking.html”; var callback = processAjaxResponse; executeXhr(callback, url); } 　　该函数为您想要与之通信的服务器资源创建一个URL并调用内部函数executeXhr，提供一个回调JavaScript函数，一旦服务器响应可用，该函数就被执行。由于我希望它运行在一个简单的Apache环境中，“cast vote URL”只是一个简单的HTML页面。在实际情况中，被调用的URL将记录票数并动态地呈现包含投票总数的响应。 　　下一步是发出一个XmlHttpRequest请求： function executeXhr(callback, url) { // branch for native XMLHttpRequest object if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = [...]]]></description>
			<content:encoded><![CDATA[<p>Ajax的核心是JavaScript对象 XmlHttpRequest。该对象在Internet Explorer 5中首次引入，它是一种支持异步请求的技术。简而言之，XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应，而不阻塞用户。 </p>
<p>　　在创建Web站点时，在客户端执行屏幕更新为用户提供了很大的灵活性。下面是使用Ajax可以完成的功能： </p>
<p>* 动态更新购物车的物品总数，无需用户单击Update并等待服务器重新发送整个页面。<br />
* 提升站点的性能，这是通过减少从服务器下载的数据量而实现的。例如，在Amazon的购物车页面，当更新篮子中的一项物品的数量时，会重新载入整个页面，这必须下载32K的数据。如果使用Ajax计算新的总量，服务器只会返回新的总量值，因此所需的带宽仅为原来的百分之一。<br />
* 消除了每次用户输入时的页面刷新。例如，在Ajax中，如果用户在分页列表上单击Next，则服务器数据只刷新列表而不是整个页面。<br />
* 直接编辑表格数据，而不是要求用户导航到新的页面来编辑数据。对于Ajax，当用户单击Edit时，可以将静态表格刷新为内容可编辑的表格。用户单击Done之后，就可以发出一个Ajax请求来更新服务器，并刷新表格，使其包含静态、只读的数据。<br />
　　一切皆有可能！但愿它能够激发您开始开发自己的基于Ajax的站点。然而，在开始之前，让我们介绍一个现有的Web站点，它遵循传统的提交/等待/重新显示的范例，我们还将讨论Ajax如何提升用户体验。 <span id="more-482"></span></p>
<p>原始的Ajax：直接使用XmlHttpRequest </p>
<p>　　如上所述，Ajax的核心是JavaScript对象XmlHttpRequest。下面的示例文章评价系统将带您熟悉Ajax的底层基本知识：http://tearesolutions.com/ajax-demo/raw-ajax.<a href="http://www.5bay.cn/tag/html" class="st_tag internal_tag" rel="tag" title="标签 html 下的日志">html</a>。注：如果您已经在本地WebLogic容器中安装了ajax-demo.war，可以导航到http://localhost:7001/ajax-demo/raw-ajax.<a href="http://www.5bay.cn/tag/html" class="st_tag internal_tag" rel="tag" title="标签 html 下的日志">html</a>， </p>
<p>　　浏览应用程序，参与投票，并亲眼看它如何运转。熟悉了该应用程序之后，继续阅读，进一步了解其工作原理细节。<br />
　　首先，您拥有一些简单的定位点标记，它连接到一个JavaScriptcastVote(rank)函数。 </p>
<p>function castVote(rank) {<br />
var url = “/ajax-demo/static-article-ranking.html”;<br />
var callback = processAjaxResponse;<br />
executeXhr(callback, url);<br />
} </p>
<p>　　该函数为您想要与之通信的服务器资源创建一个URL并调用内部函数executeXhr，提供一个回调JavaScript函数，一旦服务器响应可用，该函数就被执行。由于我希望它运行在一个简单的Apache环境中，“cast vote URL”只是一个简单的HTML页面。在实际情况中，被调用的URL将记录票数并动态地呈现包含投票总数的响应。<br />
　　下一步是发出一个XmlHttpRequest请求： </p>
<p>function executeXhr(callback, url) {<br />
// branch for native XMLHttpRequest object<br />
if (window.XMLHttpRequest) {<br />
req = new XMLHttpRequest();<br />
req.onreadystatechange = callback;<br />
req.open(“GET”, url, true);<br />
req.send(null);<br />
} // branch for IE/Windows ActiveX version<br />
else if (window.ActiveXObject) {<br />
req = new ActiveXObject(“Microsoft.XMLHTTP”);<br />
if (req) {<br />
req.onreadystatechange = callback;<br />
req.open(“GET”, url, true);<br />
req.send();<br />
}<br />
}<br />
} </p>
<p>　　如您所见，执行一个XmlHttpRequest并不简单，但非常直观。和平常一样，在JavaScript领域，大部分的工作量都花在确保浏览器兼容方面。在这种情况下，首先要确定XmlHttpRequest是否可用。如果不能用，很可能要使用Internet Explorer，这样就要使用所提供的ActiveX实现。 </p>
<p>executeXhr()方法中最关键的部分是这两行： </p>
<p>req.onreadystatechange = callback;<br />
req.open(“GET”, url, true); </p>
<p>　　第一行定义了JavaScript回调函数，您希望一旦响应就绪它就自动执行，而req.open()方法中所指定的“true”标志说明您想要异步执行该请求。<br />
　　一旦服务器处理完XmlHttpRequest并返回给浏览器，使用req.onreadystatechange指派所设置的回调方法将被自动调用。<br />
function processAjaxResponse() {<br />
// only if req shows “loaded”<br />
if (req.readyState == 4) {<br />
// only if “OK”<br />
if (req.status == 200) {<br />
502 502&#8242;votes&#8217;).innerHTML = req.responseText;<br />
} else {<br />
alert(“There was a problem retrieving the XML data:<br />
” +<br />
req.statusText);<br />
}<br />
}<br />
} </p>
<p>　　该代码相当简洁，并且使用了几个幻数，这使得难以一下子看出发生了什么。为了弄清楚这一点，下面的表格（引用自http://developer.apple.com/internet/webcontent/xmlhttpreq.html）列举了常用的XmlHttpRequest对象属性。 </p>
<p><a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" class="st_tag internal_tag" rel="tag" title="标签 属性 下的日志">属性</a> </p>
<p>描述 </p>
<p>onreadystatechange </p>
<p>每次状态改变所触发事件的事件处理程序 </p>
<p>readyState </p>
<p>对象状态值： </p>
<p>* 0 = 未初始化（uninitialized）<br />
* 1 = 正在加载（loading）<br />
* 2 = 加载完毕（loaded）<br />
* 3 = 交互（interactive）<br />
* 4 = 完成（complete） </p>
<p>responseText </p>
<p>从服务器进程返回的数据的字符串形式 </p>
<p>responseXML </p>
<p>从服务器进程返回的DOM兼容的文档数据对象 </p>
<p>status </p>
<p>从服务器返回的数字代码，比如404（未找到）或200（就绪） </p>
<p>statusText </p>
<p>伴随状态码的字符串信息 </p>
<p>　　现在processVoteResponse()函数开始显示出其意义了。它首先检查 XmlHttpRequest的整体状态以保证它已经完成（readyStatus == 4），然后根据服务器的设定询问请求状态。如果一切正常（status == 200）,就使用innerHTML属性重写DOM的“votes”节点的内容。 </p>
<p>　　既然您亲眼看到了XmlHttpRequest对象是如何工作的，就让我们利用一个旨在简化JavaScript与Java应用程序之间的异步通信的框架来对具体的细节进行抽象。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeieeeeeting.html" title="AJAX初学:IE缓存页面的问题">AJAX初学:IE缓存页面的问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeetpit.html" title="了解Ajax中的Get和Post ">了解Ajax中的Get和Post </a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeeeseeao.html" title="ajax基础知识:js事件触发大全">ajax基础知识:js事件触发大全</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/status" title="status" rel="tag">status</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/xml" title="xml" rel="tag">xml</a>, <a href="http://www.5bay.cn/tag/xmlhttp" title="xmlhttp" rel="tag">xmlhttp</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%85%BC%E5%AE%B9" title="兼容" rel="tag">兼容</a>, <a href="http://www.5bay.cn/tag/%E5%87%BD%E6%95%B0" title="函数" rel="tag">函数</a>, <a href="http://www.5bay.cn/tag/%E5%88%86%E9%A1%B5" title="分页" rel="tag">分页</a>, <a href="http://www.5bay.cn/tag/%E5%AE%B9%E5%99%A8" title="容器" rel="tag">容器</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%B8%B8%E7%94%A8" title="常用" rel="tag">常用</a>, <a href="http://www.5bay.cn/tag/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F" title="应用程序" rel="tag">应用程序</a>, <a href="http://www.5bay.cn/tag/%E5%BC%95%E5%85%A5" title="引入" rel="tag">引入</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%9B%B4%E6%96%B0" title="更新" rel="tag">更新</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%8A%82%E7%82%B9" title="节点" rel="tag">节点</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8%E6%A0%BC" title="表格" rel="tag">表格</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E8%AF%B4%E6%98%8E" title="说明" rel="tag">说明</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/ajaxeeee.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AJAX的各种控件和类库</title>
		<link>http://www.5bay.cn/network-programming/ajax.html</link>
		<comments>http://www.5bay.cn/network-programming/ajax.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:49:49 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmlhttp]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[区别]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[节点]]></category>
		<category><![CDATA[获取]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=480</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/ajax.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>Ajax控件和类库现在真的太多了，不知不觉中增加了Ajax的神秘性和复杂性，看到版内很多人为此费解和伤神，决定发此贴谈谈本人对Ajax的观点，希望能让大家对Ajax有一个本质的认识。 　　观点一：Ajax和服务器端技术毫不相关 　　严格的说，与传统web开发相比，Ajax是完完全全的客户端技术。由于很多控件封装了客户端和服务器端的通信过程，因此很多问题也因通信而起。事实上，不论何种Ajax技术，服务器端都是返回的一个纯文本流，再由客户端来处理这个文本。这段文本可以是xml格式，也可以是一个Html片段，也可以是一段JavaScript脚本，或者仅是一个字符串。服务器端仅仅是作为一个数据接口，客户端使用XMLHttpRequest对象来请求这个页面，服务器端在页面内写入结果文本，这个过程和普通的web开发没有任何区别。所不同的只是，客户端在异步获取结果后，不是直接显示在页面，而是由客户端的Javascript脚本处理后再显示在页面。至于各种控件所谓的能返回DataSet对象，Date对象，或者其他的数据类型，都是封装了这个处理过程的结果。 　　观点二：DOM模型是Ajax最本质的技术 　　之所以没有把XMLHttpRequest列为最本质的技术，因为本人觉得它实在是太简单了，它只是可以让浏览器在后台请求一个页面，并将其内容交给JavaScript处理。真正的核心应该是：DOM模型，即文档对象模型。在DOM模型里，Html标记都被认为是一个对象，例如：div对象，table对象等等。DOM模型就规定了这些对象所具有的属性、方法和事件。通过这些性质，可以对一个已经显示于浏览器的页面进行内容的修改，例如增加节点、修改节点位置，删除节点等等。而不仅仅是一个innerHTML属性这么简单，虽然这是一个很有用的属性。 　　观点三：在使用Ajax控件前理解它们的实现 　　使用Ajax控件的确可以提高效率，但如果你空中楼阁般使用控件，那就得不偿失了。从一个控件换到另外一个控件又会有一个漫长的学习曲线。所以应该从底层了解其，况且Ajax实在不是什么高深的技术。其实任何东西的最底层其实都是简单的，但如果封装了这些底层的东西，事情会变得复杂和难以理解。以Asp.net为例，它的定制特性可以使得只要在方法前加上[ajax method]类似这样的标志就可以称为一个异步方法，相信这使得Asp.net的Ajax开发显得更加“高效”或者是“神秘”，而更多的事情则被封装了。同样记住一条，任何对服务器端的请求仅仅是返回纯文本，我们不一定要依赖于封装好的处理过程，而完全可以自己来实现。 　　观点四：学好JavaScript 　　在大多数人看来，JavaScript总不是那么一种正规的语言，随便copy一段就碰巧能运行，学过c之类的人，一看也能看懂，而且在浏览器中常常有脚本错误提示，所以潜意识觉得总不能付之以大任。事实上，要学好Ajax，这就完全是一种错误的看法。javascript作为一种脚本语言，其语法的确不是很严格，但并不妨碍其完成诸多复杂的任务，没有JavaScript，就没有Ajax。所以本人强烈建议，学Ajax前，一定要好好研究一番JavaScript，一般来讲，如果能顺利看懂prototype框架的代码（如：prototype-1.3.1.js），你的JavaScript水平就基本过关了。同时对DOM模型也可以算有一个基本的了解。 　　观点五：Ajax点缀：CSS 　　用JavaScript控制CSS其实很简单，基本上每个DOM对象都有一个style对象，只要把css属性里的”-”去掉，并让随后的字母变为大写就可以作为属性使用了，例如：element.style.backgroundColor=”#f00&#8243;;在css是：选择符 {background-color:#f00} 　　一口气说这么多，希望对大家有点用处。 相关博文2010年07月26日 -- XMLHTTP对象封装技术 (0)2010年07月26日 -- 基于JSON的高级AJAX开发技术 (0)2010年07月26日 -- Ajax的工作原理 (1)2010年07月26日 -- 使用Ajax时的十个常犯的错误 (0)2010年07月26日 -- ajax的缺点 (0)2010年07月26日 -- 了解Ajax中的Get和Post (0)2010年07月26日 -- PHP和Socket简介 (0)2010年05月23日 -- 《高性能网站建设指南》读书笔记 (0)2010年07月26日 -- AJAX应用程序开发七宗罪 (0)2010年07月26日 -- AJAX初学:IE缓存页面的问题 (0)2010年07月26日 -- ajax基础知识:js事件触发大全 (0)2010年07月26日 -- PHP安全之数据过滤 (0)2010年05月23日 -- mysql优化及全文搜索 (0)2010年05月23日 -- [...]]]></description>
			<content:encoded><![CDATA[<p>Ajax控件和类库现在真的太多了，不知不觉中增加了Ajax的神秘性和复杂性，看到版内很多人为此费解和伤神，决定发此贴谈谈本人对Ajax的观点，希望能让大家对Ajax有一个本质的认识。 </p>
<p>　　观点一：Ajax和服务器端技术毫不相关 </p>
<p>　　严格的说，与传统web开发相比，Ajax是完完全全的客户端技术。由于很多控件封装了客户端和服务器端的通信过程，因此很多问题也因通信而起。事实上，不论何种Ajax技术，服务器端都是返回的一个纯文本流，再由客户端来处理这个文本。这段文本可以是xml格式，也可以是一个Html片段，也可以是一段JavaScript脚本，或者仅是一个字符串。服务器端仅仅是作为一个数据接口，客户端使用XMLHttpRequest对象来请求这个页面，服务器端在页面内写入结果文本，这个过程和普通的web开发没有任何区别。所不同的只是，客户端在异步获取结果后，不是直接显示在页面，而是由客户端的Javascript脚本处理后再显示在页面。至于各种控件所谓的能返回DataSet对象，Date对象，或者其他的数据类型，都是封装了这个处理过程的结果。 </p>
<p>　　观点二：DOM模型是Ajax最本质的技术 </p>
<p>　　之所以没有把XMLHttpRequest列为最本质的技术，因为本人觉得它实在是太简单了，它只是可以让浏览器在后台请求一个页面，并将其内容交给JavaScript处理。真正的核心应该是：DOM模型，即文档对象模型。在DOM模型里，Html标记都被认为是一个对象，例如：div对象，table对象等等。DOM模型就规定了这些对象所具有的属性、方法和事件。通过这些性质，可以对一个已经显示于浏览器的页面进行内容的修改，例如增加节点、修改节点位置，删除节点等等。而不仅仅是一个innerHTML属性这么简单，虽然这是一个很有用的属性。 </p>
<p>　　观点三：在使用Ajax控件前理解它们的实现 </p>
<p>　　使用Ajax控件的确可以提高效率，但如果你空中楼阁般使用控件，那就得不偿失了。从一个控件换到另外一个控件又会有一个漫长的学习曲线。所以应该从底层了解其，况且Ajax实在不是什么高深的技术。其实任何东西的最底层其实都是简单的，但如果封装了这些底层的东西，事情会变得复杂和难以理解。以Asp.net为例，它的定制特性可以使得只要在方法前加上[ajax method]类似这样的标志就可以称为一个异步方法，相信这使得Asp.net的Ajax开发显得更加“高效”或者是“神秘”，而更多的事情则被封装了。同样记住一条，任何对服务器端的请求仅仅是返回纯文本，我们不一定要依赖于封装好的处理过程，而完全可以自己来实现。 </p>
<p>　　观点四：学好JavaScript </p>
<p>　　在大多数人看来，JavaScript总不是那么一种正规的语言，随便copy一段就碰巧能运行，学过c之类的人，一看也能看懂，而且在浏览器中常常有脚本错误提示，所以潜意识觉得总不能付之以大任。事实上，要学好Ajax，这就完全是一种错误的看法。javascript作为一种脚本语言，其语法的确不是很严格，但并不妨碍其完成诸多复杂的任务，没有JavaScript，就没有Ajax。所以本人强烈建议，学Ajax前，一定要好好研究一番JavaScript，一般来讲，如果能顺利看懂prototype框架的代码（如：prototype-1.3.1.js），你的JavaScript水平就基本过关了。同时对DOM模型也可以算有一个基本的了解。 </p>
<p>　　观点五：Ajax点缀：CSS </p>
<p>　　用JavaScript控制CSS其实很简单，基本上每个DOM对象都有一个style对象，只要把css属性里的”-”去掉，并让随后的字母变为大写就可以作为属性使用了，例如：element.style.backgroundColor=”#f00&#8243;;在css是：选择符 {background-color:#f00} </p>
<p>　　一口气说这么多，希望对大家有点用处。 </p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeetpit.html" title="了解Ajax中的Get和Post ">了解Ajax中的Get和Post </a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeieeeeeting.html" title="AJAX初学:IE缓存页面的问题">AJAX初学:IE缓存页面的问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeeeseeao.html" title="ajax基础知识:js事件触发大全">ajax基础知识:js事件触发大全</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/tag/asp" title="ASP" rel="tag">ASP</a>, <a href="http://www.5bay.cn/tag/aspnet" title="asp.net" rel="tag">asp.net</a>, <a href="http://www.5bay.cn/tag/css" title="css" rel="tag">css</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/xml" title="xml" rel="tag">xml</a>, <a href="http://www.5bay.cn/tag/xmlhttp" title="xmlhttp" rel="tag">xmlhttp</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%8C%BA%E5%88%AB" title="区别" rel="tag">区别</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%8E%A5%E5%8F%A3" title="接口" rel="tag">接口</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%8A%82%E7%82%B9" title="节点" rel="tag">节点</a>, <a href="http://www.5bay.cn/tag/%E8%8E%B7%E5%8F%96" title="获取" rel="tag">获取</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/ajax.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>innerHTML、innerText和outerHTML的用法</title>
		<link>http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html</link>
		<comments>http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:46:30 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[正则表达式]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[说明]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=474</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>用法： &#60;div id=”test”&#62; &#60;span style=”color:red”&#62;test1&#60;/span&#62; test2 &#60;/div&#62; 在JS中可以使用： test.innerHTML: 　　也就是从对象的起始位置到终止位置的全部内容,包括Html标签。 　　上例中的test.innerHTML的值也就是“&#60;span style=”color:red”&#62;test1&#60;/span&#62; test2 ”。 test.innerText: 　　从起始位置到终止位置的内容, 但它去除Html标签 　　上例中的text.innerTest的值也就是“test1 test2”, 其中span标签去除了。 test.outerHTML: 　　除了包含innerHTML的全部内容外, 还包含对象标签本身。 　　上例中的text.outerHTML的值也就是&#60;div id=”test”&#62;&#60;span style=”color:red”&#62;test1&#60;/span&#62; test2&#60;/div&#62; 完整示例： &#60;div id=”test”&#62; &#60;span style=”color:red”&#62;test1&#60;/span&#62; test2 &#60;/div&#62; &#60;a href=”javascript:alert(test.innerHTML)”&#62;innerHTML内容&#60;/a&#62; &#60;a href=”javascript:alert(test.innerText)”&#62;inerHTML内容&#60;/a&#62; &#60;a href=”javascript:alert(test.outerHTML)”&#62;outerHTML内容&#60;/a&#62; 特别说明： 　　innerHTML是符合W3C标准的属性，而innerText只适用于IE浏览器，因此，尽可能地去使用innerHTML，而少用innerText，如果要输出不含HTML标签的内容，可以使用innerHTML取得包含HTML标签的内容后，再用正则表达式去除HTML标签，下面是一个简单的符合W3C标准的示例： &#60;a href=”javascript:alert(document.getElementById(&#8216;test&#8217;).innerHTML.replace(/&#60;.+?&#62;/gim,”))”&#62;无HTML,符合W3C标准&#60;/a&#62; 相关博文2010年07月26日 -- Ajax的工作原理 (1)2010年07月26日 -- 基于JSON的高级AJAX开发技术 (0)2010年07月26日 -- AJAX的各种控件和类库 (0)2010年07月26日 -- [...]]]></description>
			<content:encoded><![CDATA[<p>用法：</p>
<p>&lt;<a href="http://www.5bay.cn/tag/div" class="st_tag internal_tag" rel="tag" title="标签 div 下的日志">div</a> id=”test”&gt;<br />
&lt;span style=”color:red”&gt;test1&lt;/span&gt; test2<br />
&lt;/div&gt;</p>
<p>在JS中可以使用：</p>
<p>test.innerHTML:</p>
<p>　　也就是从对象的起始位置到终止位置的全部内容,包括Html标签。<br />
　　上例中的test.innerHTML的值也就是“&lt;span style=”color:red”&gt;test1&lt;/span&gt; test2 ”。</p>
<p>test.innerText:</p>
<p>　　从起始位置到终止位置的内容, 但它去除Html标签<br />
　　上例中的text.innerTest的值也就是“test1 test2”, 其中span标签去除了。</p>
<p>test.outerHTML:</p>
<p>　　除了包含innerHTML的全部内容外, 还包含对象标签本身。<br />
　　上例中的text.outerHTML的值也就是&lt;div id=”test”&gt;&lt;span style=”color:red”&gt;test1&lt;/span&gt; test2&lt;/div&gt;</p>
<p>完整示例：</p>
<p>&lt;div id=”test”&gt;<br />
&lt;span style=”color:red”&gt;test1&lt;/span&gt; test2<br />
&lt;/div&gt;</p>
<p>&lt;a href=”<a href="http://www.5bay.cn/tag/javascript" class="st_tag internal_tag" rel="tag" title="标签 javascript 下的日志">javascript</a>:alert(test.innerHTML)”&gt;innerHTML内容&lt;/a&gt;<br />
&lt;a href=”javascript:alert(test.innerText)”&gt;inerHTML内容&lt;/a&gt;<br />
&lt;a href=”javascript:alert(test.outerHTML)”&gt;outerHTML内容&lt;/a&gt;</p>
<p>特别说明：</p>
<p>　　innerHTML是符合W3C标准的属性，而innerText只适用于IE浏览器，因此，尽可能地去使用innerHTML，而少用innerText，如果要输出不含HTML标签的内容，可以使用innerHTML取得包含HTML标签的内容后，再用正则表达式去除HTML标签，下面是一个简单的符合W3C标准的示例：</p>
<p>&lt;a href=”javascript:alert(document.getElementById(&#8216;test&#8217;).innerHTML.replace(/&lt;.+?&gt;/gim,”))”&gt;无HTML,符合W3C标准&lt;/a&gt;</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/webshelleechueeee.html" title="Webshell下破解计算机管理员密码">Webshell下破解计算机管理员密码</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeeeseeao.html" title="ajax基础知识:js事件触发大全">ajax基础知识:js事件触发大全</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/tupianlunhuanleiie7opffchromeceshitongguo.html" title="图片轮换类，IE7、OP、FF、Chrome测试通过">图片轮换类，IE7、OP、FF、Chrome测试通过</a> (2)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html" title="Android在线开发工具 App Inventor">Android在线开发工具 App Inventor</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月22日 -- <a href="http://www.5bay.cn/me/csseeeeyao.html" title="CSS 中的太极拳口诀">CSS 中的太极拳口诀</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F" title="正则表达式" rel="tag">正则表达式</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E8%AF%B4%E6%98%8E" title="说明" rel="tag">说明</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XMLHTTP对象封装技术</title>
		<link>http://www.5bay.cn/network-programming/xmlhttpe.html</link>
		<comments>http://www.5bay.cn/network-programming/xmlhttpe.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:43:39 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmlhttp]]></category>
		<category><![CDATA[中文]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[初始值]]></category>
		<category><![CDATA[区别]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[获取]]></category>
		<category><![CDATA[表单]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=470</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/xmlhttpe.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>Ajax技术的实现主要依赖于xmlhttprequest，但我们在调用其来进行异步数据的传输时，由于xmlhttp是个短线过程（处理事件完成后就销毁）如果不对该对象进行包装处理的话，就不得不在需要调用的地方重新构建xmlhttprequest，每次调用都要写一大段的代码，实在不是个好办法。好在现在很多开源的ajax框架都提供了对xmlhttp封装的方案。这里以ajaxtags自带的prototype-1.4.0.js为母版，来看看如何将xmlhttp对象封装成一个可复用的方法。 在prototype.js中，首先定义了一个变量：Ajax var Ajax = { getTransport: function() { return Try.these( function() {return new ActiveXObject(&#8216;Msxml2.XMLHTTP&#8217;)}, function() {return new ActiveXObject(&#8216;Microsoft.XMLHTTP&#8217;)}, function() {return new XMLHttpRequest()} ) &#124;&#124; false; }, activeRequestCount: 0 } 变量返回了一个xmlhttprequest，可以看到，如果我们调用了Ajax.getTransport()，每次都会返回一个新的xmlhttprequest对象。 在Ajax变量中定义了一个基础方法Ajax.Base和该基础方法的原型（初始时，每个脚本方法默认都有个空的原型，该原型会继承Object的原型，如果我们在Object中改变了原型，则所有的脚本方法都会被改变。） 该基础方法被Ajax.Request所继承，注意的是，如果在Ajax.Request中填充了继承的原型的同名方法或变量，则会实现重载。 Ajax.Base原型中最主要的是setOptions方法，过会我们就会用到。 setOptions: function(options) { this.options = { method: &#8216;post&#8217;, asynchronous: true, parameters: ” } prototype中对request是通过定义Ajax.Request原型（Ajax.Request.prototype）来实现的。 但我们并不能直接对Ajax.Request进行调用，主要原因是Ajax.Request并没有提供一个统一处理的过程。而且我们可能需要通过request 再取得response。（试想一下，客户那边发出一条信息，都始终没与收到回复，那是会让人觉得很恼火的事~），prototype同样为我们封装好了resoponse（Ajax.Responders），但两者都是相互独立的，如何把他们进行整合呢？ 在 prototype中给我们提供了两个方案，一个是Ajax.Updater，另一个是Ajax.PeriodicalUpdater，两个共同点都是必须传入3个参数： container： response数据要传达的位置，该位置通过html标签的id进行定义，比如你要把返回的数据输出到html中的某个＜div＞中，则只要把container改成该id的值就可以了。如果找不到该container，则会发生脚本错误。 url： [...]]]></description>
			<content:encoded><![CDATA[<p>Ajax技术的实现主要依赖于xmlhttprequest，但我们在调用其来进行异步数据的传输时，由于xmlhttp是个短线过程（处理事件完成后就销毁）如果不对该对象进行包装处理的话，就不得不在需要调用的地方重新构建xmlhttprequest，每次调用都要写一大段的代码，实在不是个好办法。好在现在很多开源的ajax框架都提供了对xmlhttp封装的方案。这里以ajaxtags自带的prototype-1.4.0.js为母版，来看看如何将xmlhttp对象封装成一个可复用的方法。</p>
<p>在prototype.js中，首先定义了一个变量：Ajax<br />
var Ajax = {<br />
getTransport: function() {<br />
return Try.these(<br />
function() {return new ActiveXObject(&#8216;Msxml2.XMLHTTP&#8217;)},<br />
function() {return new ActiveXObject(&#8216;Microsoft.XMLHTTP&#8217;)},<br />
function() {return new XMLHttpRequest()}<br />
) || false;<br />
},</p>
<p>activeRequestCount: 0<br />
}</p>
<p>变量返回了一个xmlhttprequest，可以看到，如果我们调用了Ajax.getTransport()，每次都会返回一个新的xmlhttprequest对象。<br />
<span id="more-470"></span><br />
在Ajax变量中定义了一个基础方法Ajax.Base和该基础方法的原型（初始时，每个脚本方法默认都有个空的原型，该原型会继承Object的原型，如果我们在Object中改变了原型，则所有的脚本方法都会被改变。） 该基础方法被Ajax.Request所继承，注意的是，如果在Ajax.Request中填充了继承的原型的同名方法或变量，则会实现重载。</p>
<p>Ajax.Base原型中最主要的是setOptions方法，过会我们就会用到。<br />
setOptions: function(options) {<br />
this.options = {<br />
method: &#8216;post&#8217;,<br />
asynchronous: true,<br />
parameters: ”<br />
}</p>
<p>prototype中对request是通过定义Ajax.Request原型（Ajax.Request.prototype）来实现的。</p>
<p>但我们并不能直接对Ajax.Request进行调用，主要原因是Ajax.Request并没有提供一个统一处理的过程。而且我们可能需要通过request 再取得response。（试想一下，客户那边发出一条信息，都始终没与收到回复，那是会让人觉得很恼火的事~），prototype同样为我们封装好了resoponse（Ajax.Responders），但两者都是相互独立的，如何把他们进行整合呢？</p>
<p>在 prototype中给我们提供了两个方案，一个是Ajax.Updater，另一个是Ajax.PeriodicalUpdater，两个共同点都是必须传入3个参数：</p>
<p>container：</p>
<p>response数据要传达的位置，该位置通过html标签的id进行定义，比如你要把返回的数据输出到html中的某个＜<a href="http://www.5bay.cn/tag/div" class="st_tag internal_tag" rel="tag" title="标签 div 下的日志">div</a>＞中，则只要把container改成该id的值就可以了。如果找不到该container，则会发生脚本错误。</p>
<p><a href="http://www.5bay.cn/tag/url" class="st_tag internal_tag" rel="tag" title="标签 url 下的日志">url</a>：</p>
<p>request请求要传递的目的地。该目的地应该是个servlet或jspservlet，因为request对象只能被servlet中的do***方法自动获取。</p>
<p>options：</p>
<p>结构应该与上面Ajax.Base定义的setOptions（）中的option结构相同，如果为空或不写，则采用 Ajax.Base定义的初始值（没有传递任何参数时使用）。</p>
<p>两者的区别在与Ajax.Updater返回给container的是完整的responseText，只有在responseText完全取得又没发生异常时才会把内容写到container里面，而PeriodicalUpdater在获取responseText时，不管是否已经完整取得，就把内容填进container，直到发生异常或完全取得responseText。大多数情况应该使用第一种方法，因为第一种方法在发生异常时会把异常信息显示在container里面，而第二种就不一定了。</p>
<p>既然已经把xmlhttp封装好了，我们只需要设置好前面所说的3个参数就可以了，要注意的是，设置options参数，一定要按照base中的options结构进行设置，如果我们使用post方法，还可以在opitons中设置postBody属性，把要传递的queryString 放到body中,一个使用post方法进行传递的脚本例子如下：</p>
<p>/*表单提交用post方法*/<br />
function doRequest(container,paraments,url){<br />
var options ={<br />
method: &#8216;post&#8217;,<br />
asynchronous: true,<br />
postBody: paraments<br />
};<br />
new Ajax.Updater(container,url,options);<br />
}</p>
<p>最后不得不说的是中文编码问题，prototype对传递的参数都进行了编码转换工作，每个传递值通过encodeURIComponent　进行了处理．编码会被转换成utf－8，在后台获取request时，应该统一使用request.setCharacterEncoding(“UTF-8&#8243;)对request设置编码，而不必管页面的编码格式是什么．如果使用post方法进行传递数据，则会自动执行:</p>
<p>request．setHeader(&#8216;Content-type&#8217;,'application/x-www-form-urlencoded&#8217;).确保传递数据编码格式的正确.</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeieeeeeting.html" title="AJAX初学:IE缓存页面的问题">AJAX初学:IE缓存页面的问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeetpit.html" title="了解Ajax中的Get和Post ">了解Ajax中的Get和Post </a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/tag/code" title="code" rel="tag">code</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/xml" title="xml" rel="tag">xml</a>, <a href="http://www.5bay.cn/tag/xmlhttp" title="xmlhttp" rel="tag">xmlhttp</a>, <a href="http://www.5bay.cn/tag/%E4%B8%AD%E6%96%87" title="中文" rel="tag">中文</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%88%9D%E5%A7%8B%E5%80%BC" title="初始值" rel="tag">初始值</a>, <a href="http://www.5bay.cn/tag/%E5%8C%BA%E5%88%AB" title="区别" rel="tag">区别</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%8E%B7%E5%8F%96" title="获取" rel="tag">获取</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8%E5%8D%95" title="表单" rel="tag">表单</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/xmlhttpe.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ajax基础知识:js事件触发大全</title>
		<link>http://www.5bay.cn/network-programming/ajaxeeeeseeao.html</link>
		<comments>http://www.5bay.cn/network-programming/ajaxeeeeseeao.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:42:48 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[JavaScript&Ajax]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[大全]]></category>
		<category><![CDATA[容器]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[页面]]></category>
		<category><![CDATA[鼠标]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=468</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/ajaxeeeeseeao.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>onactivate 当对象设置为活动元素时触发。 onbeforeactivate 对象要被设置为当前元素前立即触发。 onbeforecut 当选中区从文档中删除之前在源对象触发。 onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即触发。 onbeforeeditfocus 在包含于可编辑元素内的对象进入用户界面激活状态前或可编辑容器变成控件选中区前触发。 onbeforepaste 在选中区从系统剪贴板粘贴到文档前在目标对象上触发。 onclick 在用户用鼠标左键单击对象时触发。 oncontextmenu 在用户使用鼠标右键单击客户区打开上下文菜单时触发。 oncontrolselect 当用户将要对该对象制作一个控件选中区时触发。 oncut 当对象或选中区从文档中删除并添加到系统剪贴板上时在源元素上触发。 ondblclick 当用户双击对象时触发。 ondeactivate 当 activeElement 从当前对象变为父文档其它对象时触发。 ondrag 当进行拖曳操作时在源对象上持续触发。 ondragend 当用户在拖曳操作结束后释放鼠标时在源对象上触发。 ondragenter 当用户拖曳对象到一个合法拖曳目标时在目标元素上触发。 ondragleave 当用户在拖曳操作过程中将鼠标移出合法拖曳目标时在目标对象上触发。 ondragover 当用户拖曳对象划过合法拖曳目标时持续在目标元素上触发。 ondragstart 当用户开始拖曳文本选中区或选中对象时在源对象上触发。 ondrop 当鼠标按钮在拖曳操作过程中释放时在目标对象上触发。 onfocusin 当元素将要被设置为焦点之前触发。 onfocusout 在移动焦点到其它元素之后立即触发于当前拥有焦点的元素上触发。 onhelp 当用户在浏览器为当前窗口时按 F1 键时触发。 onkeydown 当用户按下键盘按键时触发。 onkeypress 当用户按下字面键时触发。 onkeyup [...]]]></description>
			<content:encoded><![CDATA[<p>onactivate 当对象设置为活动元素时触发。<br />
onbeforeactivate 对象要被设置为当前元素前立即触发。<br />
onbeforecut 当选中区从文档中删除之前在源对象触发。<br />
onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即触发。<br />
onbeforeeditfocus 在包含于可编辑元素内的对象进入用户界面激活状态前或可编辑容器变成控件选中区前触发。<br />
onbeforepaste 在选中区从系统剪贴板粘贴到文档前在目标对象上触发。<br />
onclick 在用户用鼠标左键单击对象时触发。<br />
oncontextmenu 在用户使用鼠标右键单击客户区打开上下文菜单时触发。<br />
oncontrolselect 当用户将要对该对象制作一个控件选中区时触发。<br />
oncut 当对象或选中区从文档中删除并添加到系统剪贴板上时在源元素上触发。<br />
ondblclick 当用户双击对象时触发。<br />
ondeactivate 当 activeElement 从当前对象变为父文档其它对象时触发。<br />
ondrag 当进行拖曳操作时在源对象上持续触发。<br />
ondragend 当用户在拖曳操作结束后释放鼠标时在源对象上触发。<br />
ondragenter 当用户拖曳对象到一个合法拖曳目标时在目标元素上触发。<br />
ondragleave 当用户在拖曳操作过程中将鼠标移出合法拖曳目标时在目标对象上触发。<br />
ondragover 当用户拖曳对象划过合法拖曳目标时持续在目标元素上触发。<br />
ondragstart 当用户开始拖曳文本选中区或选中对象时在源对象上触发。<br />
ondrop 当鼠标按钮在拖曳操作过程中释放时在目标对象上触发。<br />
onfocusin 当元素将要被设置为焦点之前触发。<br />
onfocusout 在移动焦点到其它元素之后立即触发于当前拥有焦点的元素上触发。<br />
onhelp 当用户在浏览器为当前窗口时按 F1 键时触发。<br />
onkeydown 当用户按下键盘按键时触发。<br />
onkeypress 当用户按下字面键时触发。<br />
onkeyup 当用户释放键盘按键时触发。<br />
onmousedown 当用户用任何鼠标按钮单击对象时触发。<br />
onmousemove 当用户将鼠标划过对象时触发。<br />
onmouseout 当用户将鼠标指针移出对象边界时触发。<br />
onmouseover 当用户将鼠标指针移动到对象内时触发。<br />
onmouseup 当用户在鼠标位于对象之上时释放鼠标按钮时触发。<br />
onmousewheel 当鼠标滚轮按钮旋转时触发。<br />
onmove 当对象移动时触发。<br />
onmoveend 当对象停止移动时触发。<br />
onmovestart 当对象开始移动时触发。<br />
onpaste 当用户粘贴数据以便从系统剪贴板向文档传送数据时在目标对象上触发。<br />
onpropertychange 当在对象上发生对象上发生属性更改时触发。<br />
onreadystatechange 当对象状态变更时触发。<br />
onresizeend 当用户更改完控件选中区中对象的尺寸时触发。<br />
onresizestart 当用户开始更改控件选中区中对象的尺寸时触发。<br />
onselectionchange 当文档的选中状态改变时触发。<br />
onstop 当用户单击停止按钮或离开 <a href="http://www.5bay.cn/tag/web" class="st_tag internal_tag" rel="tag" title="标签 web 下的日志">Web</a> 页面时触发。 </p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html" title="innerHTML、innerText和outerHTML的用法">innerHTML、innerText和outerHTML的用法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeetpit.html" title="了解Ajax中的Get和Post ">了解Ajax中的Get和Post </a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html" title="服务器消息的广播">服务器消息的广播</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/category/network-programming/javascript-ajax" title="JavaScript&amp;Ajax" rel="tag">JavaScript&amp;Ajax</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/menu" title="menu" rel="tag">menu</a>, <a href="http://www.5bay.cn/tag/seo" title="seo" rel="tag">seo</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/%E5%A4%A7%E5%85%A8" title="大全" rel="tag">大全</a>, <a href="http://www.5bay.cn/tag/%E5%AE%B9%E5%99%A8" title="容器" rel="tag">容器</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a>, <a href="http://www.5bay.cn/tag/%E9%BC%A0%E6%A0%87" title="鼠标" rel="tag">鼠标</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/ajaxeeeeseeao.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于JSON的高级AJAX开发技术</title>
		<link>http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html</link>
		<comments>http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 16:39:46 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[网络编程]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[分离]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[应用程序]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[浏览器]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[自身]]></category>
		<category><![CDATA[诫]]></category>
		<category><![CDATA[链接]]></category>
		<category><![CDATA[面向对象]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=464</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>一、 引言 　　毫无疑问，AJAX已经成为当今Web开发中一种强有力的用户交互技术，但是它的许多可能性应用仍然鲜为人知。在本文中，我们将来共同探讨如何使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将详细讨论如何创建一组对象(在其它语言中经常被当作一个包)，如何把这些对象串行化为JSON以发送到服务器端，以及如何把服务器端JSON反串行化为客户端JavaScript对象。 　　提示：你可以在Douglas Crockford的网站上找到本文中使用的JSON分析器。 　　在继续阅读前，本文假定你已经掌握了JavaScript技术并且了解如何创建一个基本的AJAX引擎，并经由AJAX技术向服务器端发出请求和从服务器端接收响应。为了更好地理解本文中示例，你需要下载本文相应的源码文件。 　　二、 开始 　　为了进一步抽象我们的AJAX请求并有助于我们以后在不同的应用程序间共享AJAX引擎代码，本文使用了一个我自己创建的AJAX引擎。为了使用这个引擎，我们简单地导入三个JavaScript文件并且向一个名为AjaxUpdater的对象发出请求。然后，由该引擎来负责处理其它任务，包括把响应代理到在该请求中指定的回调方法中。下面的示例展示了我们如何使用这个引擎发出请求以及导入相关的文件： ＜script type=”text/javascript”src=”javascript/model/Ajax.js”＞＜/script＞ ＜script type=”text/javascript” src=”javascript/model/HTTP.js”＞＜/script＞ ＜script type=”text/javascript” src=”javascript/model/AjaxUpdater.js”＞＜/script＞ ＜script type=”text/javascript”＞ document.load = AjaxUpdater.Update(’GET’， URL， callback); ＜/script＞ 　　首先，让我们来讨论JavaScript对象。 三、 JavaScript对象 　　JavaScript以前经常被误解，似乎它主要用于实现客户浏览器端图形效果。其实，JavaScript是一种强有力的语言，特别当它与AJAX以及一个应用程序的服务器端相结合时;但是，即使在客户端，JavaScript也能够实现远比你预料得多的多的功能。面向对象的JavaScript就是一个示例，它能够使我们创建对象，扩展内在对象，甚至能够把我们的对象创建成包以达到更容易的管理之目的。 　　在本文示例中，我们将创建三个对象：Auto，Car和Wheel。其中，每一个都是简单的对象;在此，我们仅使用它们来展示如何创建一个基本包。 　　首先，Auto对象被声明为一个新的对象： 　　var Auto = new Object(); 　　注意，这个Auto对象将用作Car对象的父类。因此，Car对象将成为Auto对象的一个属性，只不过它被分离到另一个文件中以更易于管理(这个概念经常被用于其它面向对象的语言中，但是在JavaScript中却并不经常提起它)。下面是这个Car对象相应的代码： 　　Auto.Car = new Object(); 　　Auto.Car.color = “#fff”; 　　Auto.Car.setColor = function(_color) 　　{ 　　Auto.Car.color = _color; 　　} 　　Auto.Car.setColor(“#333&#8243;); 　　如你所见，该Car对象是Auto对象的一个子对象—这分明是一种类对象层次结构。这个对象有一个名为color的属性和一个用于设置它的方法。在此，我们把color属性设置为灰色以覆盖掉缺省的白色。当在后面我们串行化该对象时请牢记住这个事实。 　　下一个对象，Wheel，是Car的一个子对象： [...]]]></description>
			<content:encoded><![CDATA[<p>一、 引言</p>
<p>　　毫无疑问，AJAX已经成为当今Web开发中一种强有力的用户交互技术，但是它的许多可能性应用仍然鲜为人知。在本文中，我们将来共同探讨如何使用JavaScript对象标志(JSON)和JSON分析器在服务器和客户端AJAX引擎之间创建复杂而强有力的JSON数据传输层。我们将详细讨论如何创建一组对象(在其它语言中经常被当作一个包)，如何把这些对象串行化为JSON以发送到服务器端，以及如何把服务器端JSON反串行化为客户端JavaScript对象。</p>
<p>　　提示：你可以在Douglas Crockford的网站上找到本文中使用的JSON分析器。</p>
<p>　　在继续阅读前，本文假定你已经掌握了JavaScript技术并且了解如何创建一个基本的AJAX引擎，并经由AJAX技术向服务器端发出请求和从服务器端接收响应。为了更好地理解本文中示例，你需要下载本文相应的源码文件。<span id="more-464"></span></p>
<p>　　二、 开始</p>
<p>　　为了进一步抽象我们的AJAX请求并有助于我们以后在不同的应用程序间共享AJAX引擎代码，本文使用了一个我自己创建的AJAX引擎。为了使用这个引擎，我们简单地导入三个JavaScript文件并且向一个名为AjaxUpdater的对象发出请求。然后，由该引擎来负责处理其它任务，包括把响应代理到在该请求中指定的回调方法中。下面的示例展示了我们如何使用这个引擎发出请求以及导入相关的文件：</p>
<p>＜script type=”text/javascript”src=”javascript/model/<a href="http://www.5bay.cn/tag/ajax" class="st_tag internal_tag" rel="tag" title="标签 ajax 下的日志">Ajax</a>.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/HTTP.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/AjaxUpdater.js”＞＜/script＞<br />
＜script type=”text/javascript”＞<br />
document.load = AjaxUpdater.Update(’GET’， URL， callback);<br />
＜/script＞ </p>
<p>　　首先，让我们来讨论JavaScript对象。</p>
<p>三、 JavaScript对象 </p>
<p>　　JavaScript以前经常被误解，似乎它主要用于实现客户浏览器端图形效果。其实，JavaScript是一种强有力的语言，特别当它与AJAX以及一个应用程序的服务器端相结合时;但是，即使在客户端，JavaScript也能够实现远比你预料得多的多的功能。面向对象的JavaScript就是一个示例，它能够使我们创建对象，扩展内在对象，甚至能够把我们的对象创建成包以达到更容易的管理之目的。</p>
<p>　　在本文示例中，我们将创建三个对象：Auto，Car和Wheel。其中，每一个都是简单的对象;在此，我们仅使用它们来展示如何创建一个基本包。</p>
<p>　　首先，Auto对象被声明为一个新的对象：</p>
<p>　　var Auto = new Object(); </p>
<p>　　注意，这个Auto对象将用作Car对象的父类。因此，Car对象将成为Auto对象的一个属性，只不过它被分离到另一个文件中以更易于管理(这个概念经常被用于其它面向对象的语言中，但是在JavaScript中却并不经常提起它)。下面是这个Car对象相应的代码：</p>
<p>　　Auto.Car = new Object();<br />
　　Auto.Car.color = “#fff”;<br />
　　Auto.Car.setColor = function(_color)<br />
　　{<br />
　　Auto.Car.color = _color;<br />
　　}<br />
　　Auto.Car.setColor(“#333&#8243;); </p>
<p>　　如你所见，该Car对象是Auto对象的一个子对象—这分明是一种类对象层次结构。这个对象有一个名为color的属性和一个用于设置它的方法。在此，我们把color属性设置为灰色以覆盖掉缺省的白色。当在后面我们串行化该对象时请牢记住这个事实。</p>
<p>　　下一个对象，Wheel，是Car的一个子对象：</p>
<p>Auto.Car.Wheel = new Object();<br />
Auto.Car.Wheel.color = “#000&#8243;; </p>
<p>　　在此，Wheel是一个基本对象，但是它展示了对象层次中的又一个层。这个对象有一个称为color的缺省值为黑色(“#000”)的属性。</p>
<p>　　下面，让我们来分析一下为什么这些对象如此重要以及我们是如何使用它们提供的简单的属性的。</p>
<p>四、 把JavaScript对象串行化为JSON </p>
<p>　　借助于JSON分析器，我们可以很容易地把刚才创建的JavaScript对象串行化为JSON。首先，我们需要下载该分析器的一个副本，并且要把它添加到文档中。下面是我在本文示例中用于导入该脚本的相应的代码：</p>
<p>＜script type=”text/javascript” src=”javascript/utils/jsonparser.js”＞＜/script＞ </p>
<p>　　我已经把该分析器添加到我的javascript目录，即一个称为utils的子目录下。</p>
<p>　　下面是最终的包括到其中用于导入适当的JavaScript文件的代码片断：</p>
<p>以下是引用片段：<br />
＜script type=”text/javascript” src=”javascript/Auto.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/Car.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/Wheel.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/utils/jsonparser.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/Ajax.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/HTTP.js”＞＜/script＞<br />
＜script type=”text/javascript” src=”javascript/model/AjaxUpdater.js”＞＜/script＞ </p>
<p>　　在导入适当的文件后，我们可以通过把两个div元素和一个onload事件简单地添加到HTML文档中开始串行化。这两个div元素将分别拥有ID：body和loading。其中，这个loading标签将由AJAX引擎使用来指示进度情况，而body标签将用于显示消息。</p>
<p>＜div id=”loading”＞＜/div＞<br />
＜div id=”body”＞＜/div＞ </p>
<p>　　onload事件相应于body元素并且设置它的innerHTML属性为JavaScript对象(作为一个串行化的JSON字符串)。为了实现这一目的，我在Auto对象上使用了jsonparser.js文件内的toJSONString方法：</p>
<p>＜body onload=”document.getElementById(’body’).innerHTML = ’＜b＞Local objects serialized as JSON＜/b＞<br />
Auto Object: ’+ Auto.toJSONString();”＞ </p>
<p>　　这段代码使用了Auto对象及其所有的子对象，并且使用JSON分析器的toJSONString方法把它们串行化为一个JSON字符串。然后，该数据可以被用作服务器端的一种数据交换格式。</p>
<p>　　你可能还记得，在前面我们曾调用了一个称为setColor的方法来改变Car对象的颜色。当时，我使用它是因为我想向你展示串行化能够在运行时刻的任何点上实现，而且还为了反映出对象中最新的数据。</p>
<p>　　如果你仔细分析一下onload事件，你会注意到，Car和Wheel对象都包装在方括号内，这些方括号代表了父对象(即Auto)。这意味着，该串行化的JavaScript对象能够在运行时刻被发送到服务器端以存储最新的数据，并且也可以在应用程序启动时从服务器端进行接收以便从数据库中检索多数的当前数据。最精彩的部分在于，为了创建一种“无缝”的过程，所有与服务器之间实现的数据交换都可以使用JSON技术来实现。</p>
<p>　　下面，让我们来看一下相同的数据是如何从服务器端接收的，以及它们是如何被使用最新的数据(典型地，来源于一个数据库)串行化为客户端JavaScript对象的。</p>
<p>五、 把JSON反串行化为客户端JavaScript对象 </p>
<p>　　在本文中，我简单地把一个静态文件创建为JSON响应，但是在实际开发中，你可以把这些数据存储在一个数据库中并且使用一种服务器端语言返回它。基于这一能力，我们就可以轻松地创建一种强有力的数据交换过程!在前面，我们已经分析了这一串行化过程。凭基本的AJAX体验，你应该能够理解数据是如何被寄送到服务器端的。现在，让我们着手讨论反串行化的问题。首先来看一个针对本文示例提供的静态JSON文件。这个文件其实是我们在上一节中串行化的数据：</p>
<p>}} </p>
<p>　　作为一个请求JSON文件的示例，当我们点击下列链接时将请求这个串行化的Auto对象：</p>
<p>＜a href=”javascript:AjaxUpdater.Update(’GET’， ’json/data.js’， displayResponse);”＞Get remote JSON＜/a＞ </p>
<p>　　一旦接收到响应消息，我们的称为displayResponse回调方法就会被激活，然后，我们就能够反串行化并开始使用这些对象：</p>
<p>＜script type=”text/javascript”＞<br />
function displayResponse()<br />
{<br />
　if(Ajax.checkReadyState(’loading’) == “OK”)<br />
　{<br />
　　var Auto = Ajax.request.responseText.parseJSON();<br />
　　document.getElementById(“body”).innerHTML += ”<br />
＜b＞Remote JSON unserialized＜/b＞”;<br />
　　document.getElementById(“body”).innerHTML += ”<br />
Car color: “+Auto.Car.color;<br />
　　document.getElementById(“body”).innerHTML += ”<br />
Wheel color: “+Auto.Car.Wheel.color;<br />
　}<br />
}<br />
＜/script＞ </p>
<p>　　这是相当激动人心的一部分!一旦我们拥有了该responseText，我们就能够简单地使用JSON分析器中的parseJSON方法来从串行化的数据中重建我们的Auto对象。借助于这个新的Auto对象，我们就可以调用相应的子对象。这个特征允许我们在服务器和客户端来回发送对象—而不必进行大量的分析工作，然而在以前标准的XML响应情况下我们将却必须这样做。这样以来，我们就可以创建出能够基于AJAX技术来保留自身状态的客户端JavaScript对象</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/webshelleechueeee.html" title="Webshell下破解计算机管理员密码">Webshell下破解计算机管理员密码</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/gaoxingnengwangzhanjianshezhinandushubiji.html" title="《高性能网站建设指南》读书笔记">《高性能网站建设指南》读书笔记</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ajax" title="ajax" rel="tag">ajax</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/html" title="html" rel="tag">html</a>, <a href="http://www.5bay.cn/tag/javascript" title="javascript" rel="tag">javascript</a>, <a href="http://www.5bay.cn/tag/js" title="js" rel="tag">js</a>, <a href="http://www.5bay.cn/tag/mod" title="mod" rel="tag">mod</a>, <a href="http://www.5bay.cn/category/network-programming/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/url" title="url" rel="tag">url</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/xml" title="xml" rel="tag">xml</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%88%86%E7%A6%BB" title="分离" rel="tag">分离</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F" title="应用程序" rel="tag">应用程序</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B5%8F%E8%A7%88%E5%99%A8" title="浏览器" rel="tag">浏览器</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/category/network-programming" title="网络编程" rel="tag">网络编程</a>, <a href="http://www.5bay.cn/tag/%E8%87%AA%E8%BA%AB" title="自身" rel="tag">自身</a>, <a href="http://www.5bay.cn/tag/e" title="诫" rel="tag">诫</a>, <a href="http://www.5bay.cn/tag/%E9%93%BE%E6%8E%A5" title="链接" rel="tag">链接</a>, <a href="http://www.5bay.cn/tag/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1" title="面向对象" rel="tag">面向对象</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rsync详解</title>
		<link>http://www.5bay.cn/server-building/rsyncxiangjie.html</link>
		<comments>http://www.5bay.cn/server-building/rsyncxiangjie.html#comments</comments>
		<pubDate>Sat, 22 May 2010 21:38:09 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[include]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[判断]]></category>
		<category><![CDATA[失败]]></category>
		<category><![CDATA[实例]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[更新]]></category>
		<category><![CDATA[源代码]]></category>
		<category><![CDATA[版本]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[网站]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[说明]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[链接]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[镜像]]></category>
		<category><![CDATA[隐藏]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=380</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/rsyncxiangjie.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>1、什么是Rsync Rsync（remote synchronize）是一个远程数据同步工具，可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步，这个算法只传送两个文件的不同部分，而不是每次都整份传送，因此速度相当快。   Rsync本来是用于替代rcp的一个工具，目前由rsync.samba.org维护，所以rsync.conf文件的格式类似于samba的主配置文件。Rsync可以通过rsh或ssh使用，也能以daemon模式去运行，在以daemon方式运行时Rsync server会打开一个873端口，等待客户端去连接。连接时，Rsync server会检查口令是否相符，若通过口令查核，则可以开始进行文件传输。第一次连通完成时，会把整份文件传输一次，以后则就只需进行增量备份。 Rsync支持大多数的类Unix系统，无论是Linux、Solaris还是BSD上都经过了良好的测试。此外，它在windows平台下也有相应的版本，如cwRsync和Sync2NAS等工具。 Rsync的基本特点如下： 1.可以镜像保存整个目录树和文件系统； 2.可以很容易做到保持原来文件的权限、时间、软硬链接等； 3.无须特殊权限即可安装； 4.优化的流程，文件传输效率高； 5.可以使用rsh、ssh等方式来传输文件，当然也可以通过直接的socket连接； 6.支持匿名传输。 2、Rsync同步算法 Rsync只所以同步文件的速度相当快，是因为“Rsync同步算法”能在很短的时间内计算出需要备份的数据，关于Rsync的同步算法描述如下： 假定在1号和2号两台计算机之间同步相似的文件A与B，其中1号对文件A拥有访问权，2号对文件B拥有访问权。并且假定主机1号与2号之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成： 1、2号将文件B分割成一组不重叠的固定大小为S字节的数据块，最后一块可能会比S 小。 2、2号对每一个分割好的数据块执行两种校验：一种是32位的滚动弱校验，另一种是128位的MD4强校验。 3、2号将这些校验结果发给1号。 4、1号通过搜索文件A的所有大小为S的数据块(偏移量可以任选，不一定非要是S的倍数)，来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。 5、1号发给2号一串指令来生成文件A在2号上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明，要么是一个数据块，这个数据块肯定是没有与文件B的任何一个数据块匹配上的。 3、Rsync参数说明 3.1 rsyncd.conf配置文件 －、全局参数 在文件中[module]之前的所有参数都是全局参数，当然也可以在全局参数部分定义模块参数，这时候该参数的值就是所有模块的默认值。 port 指定后台程序使用的端口号，默认为873。 motd file “motd file”参数用来指定一个消息文件，当客户连接服务器时该文件的内容显示给客户，默认是没有motd文件的。 log file “log file”指定rsync的日志文件，而不将日志发送给syslog。比如可指定为“/var/log/rsyncd.log”。 pid file 指定rsync的pid文件，通常指定为“/var/run/rsyncd.pid”。 syslog facility 指定rsync发送日志消息给syslog时的消息级别，常见的消息级别是：uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, [...]]]></description>
			<content:encoded><![CDATA[<p>1、什么是Rsync</p>
<p>Rsync（remote synchronize）是一个远程数据同步工具，可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步，这个算法只传送两个文件的不同部分，而不是每次都整份传送，因此速度相当快。</p>
<p> <span id="more-380"></span></p>
<p>Rsync本来是用于替代rcp的一个工具，目前由rsync.samba.org维护，所以rsync.conf文件的格式类似于samba的主配置文件。Rsync可以通过rsh或ssh使用，也能以daemon模式去运行，在以daemon方式运行时Rsync server会打开一个873端口，等待客户端去连接。连接时，Rsync server会检查口令是否相符，若通过口令查核，则可以开始进行文件传输。第一次连通完成时，会把整份文件传输一次，以后则就只需进行增量备份。</p>
<p>Rsync支持大多数的类Unix系统，无论是Linux、Solaris还是BSD上都经过了良好的测试。此外，它在windows平台下也有相应的版本，如cwRsync和Sync2NAS等工具。</p>
<p>Rsync的基本特点如下：</p>
<p>1.可以镜像保存整个目录树和文件系统；</p>
<p>2.可以很容易做到保持原来文件的权限、时间、软硬链接等；</p>
<p>3.无须特殊权限即可安装；</p>
<p>4.优化的流程，文件传输效率高；</p>
<p>5.可以使用rsh、ssh等方式来传输文件，当然也可以通过直接的socket连接；</p>
<p>6.支持匿名传输。<br />
2、Rsync同步算法</p>
<p>Rsync只所以同步文件的速度相当快，是因为“Rsync同步算法”能在很短的时间内计算出需要备份的数据，关于Rsync的同步算法描述如下：</p>
<p>假定在1号和2号两台计算机之间同步相似的文件A与B，其中1号对文件A拥有访问权，2号对文件B拥有访问权。并且假定主机1号与2号之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成：</p>
<p>1、2号将文件B分割成一组不重叠的固定大小为S字节的数据块，最后一块可能会比S 小。<br />
2、2号对每一个分割好的数据块执行两种校验：一种是32位的滚动弱校验，另一种是128位的MD4强校验。<br />
3、2号将这些校验结果发给1号。<br />
4、1号通过搜索文件A的所有大小为S的数据块(偏移量可以任选，不一定非要是S的倍数)，来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。<br />
5、1号发给2号一串指令来生成文件A在2号上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明，要么是一个数据块，这个数据块肯定是没有与文件B的任何一个数据块匹配上的。</p>
<p>3、Rsync参数说明<br />
3.1 rsyncd.conf配置文件<br />
－、全局参数</p>
<p>在文件中[module]之前的所有参数都是全局参数，当然也可以在全局参数部分定义模块参数，这时候该参数的值就是所有模块的默认值。</p>
<p>port</p>
<p>指定后台程序使用的端口号，默认为873。<br />
motd file</p>
<p>“motd file”参数用来指定一个消息文件，当客户连接服务器时该文件的内容显示给客户，默认是没有motd文件的。<br />
log file</p>
<p>“log file”指定rsync的日志文件，而不将日志发送给syslog。比如可指定为“/var/log/rsyncd.log”。<br />
pid file</p>
<p>指定rsync的pid文件，通常指定为“/var/run/rsyncd.pid”。<br />
syslog facility</p>
<p>指定rsync发送日志消息给syslog时的消息级别，常见的消息级别是：uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。</p>
<p>二、模块参数</p>
<p>主要是定义服务器哪个目录要被同步。其格式必须为“[module]”形式，这个名字就是在rsync 客户端看到的名字，其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。我们可以根据自己的需要，来指定多个模块，模块中可以定义以下参数：</p>
<p>comment</p>
<p>给模块指定一个描述，该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。<br />
path</p>
<p>指定该模块的供备份的目录树路径，该参数是必须指定的。<br />
use chroot</p>
<p>如果”use chroot”指定为true，那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护，但是缺点是需要以roots权限，并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true。<br />
uid</p>
<p>该选项指定当该模块传输文件时守护进程应该具有的uid，配合gid选项使用可以确定哪些可以访问怎么样的文件权限，默认值是”nobody”。<br />
gid</p>
<p>该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为”nobody”。<br />
max connections</p>
<p>指定该模块的最大并发连接数量以保护服务器，超过限制的连接请求将被告知随后再试。默认值是0，也就是没有限制。<br />
list</p>
<p>该选项设定当客户请求可以使用的模块列表时，该模块是否应该被列出。如果设置该选项为false，可以创建隐藏的模块。默认值是true。<br />
read only</p>
<p>该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败，如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。<br />
exclude</p>
<p>用来指定多个由空格隔开的多个文件或目录(相对路径)，并将其添加到exclude列表中。这等同于在客户端命令中使用&#8211;exclude来指定模式，一个模块只能指定一个exclude选项。但是需要注意的一点是该选项有一定的安全性问题，客户很有可能绕过exclude列表，如果希望确保特定的文件不能被访问，那就最好结合uid/gid选项一起使用。<br />
exclude from</p>
<p>指定一个包含exclude模式的定义的文件名，服务器从该文件中读取exclude列表定义。<br />
include</p>
<p>用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用&#8211;include来指定模式，结合include和exclude可以定义复杂的exclude/include规则。<br />
include from</p>
<p>指定一个包含include模式的定义的文件名，服务器从该文件中读取include列表定义。<br />
auth users</p>
<p>该选项指定由空格或逗号分隔的用户名列表，只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果”auth users”被设置，那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在”secrets file”选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。<br />
secrets file</p>
<p>该选项指定一个包含定义用户名:密码对的文件。只有在”auth users”被定义时，该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名，需要限式指定一个(例如：/etc/rsyncd.passwd)。注意：该文件的权限一定要是600，否则客户端将不能连接服务器。<br />
strict modes</p>
<p>该选项指定是否监测密码文件的权限，如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问，其他任何用户不可以访问该文件。默认值为true。<br />
hosts allow</p>
<p>该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式：</p>
<p>单个IP地址，例如：192.167.0.1<br />
整个网段，例如：192.168.0.0/24，也可以是192.168.0.0/255.255.255.0</p>
<p>多个IP或网段需要用空格隔开，“*”则表示所有，默认是允许所有主机连接。<br />
hosts deny</p>
<p>指定不允许连接rsync服务器的机器，可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。<br />
ignore errors</p>
<p>指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IO错误，一般来说rsync在出现IO错误时将将跳过&#8211;delete操作，以防止因为暂时的资源不足或其它IO错误导致的严重问题。<br />
ignore nonreadable</p>
<p>指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。<br />
lock file</p>
<p>指定支持max connections参数的锁文件，默认值是/var/run/rsyncd.lock。<br />
transfer logging</p>
<p>使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。<br />
log format</p>
<p>通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串，可以使用的格式定义符如下所示：</p>
<p>%h 远程主机名</p>
<p>%a 远程IP地址</p>
<p>%l 文件长度字符数</p>
<p>%p 该次rsync会话的进程id</p>
<p>%o 操作类型：”send”或”recv”</p>
<p>%f 文件名</p>
<p>%P 模块路径</p>
<p>%m 模块名</p>
<p>%t 当前时间</p>
<p>%u 认证的用户名(匿名时是null)</p>
<p>%b 实际传输的字节数</p>
<p>%c 当发送文件时，该字段记录该文件的校验码</p>
<p>默认log格式为：”%o %h [%a] %m (%u) %f %l”，一般来说,在每行的头上会添加”%t [%p] “。在源代码中同时发布有一个叫rsyncstats的perl脚本程序来统计这种格式的日志文件。<br />
timeout</p>
<p>通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟，0表示没有超时定义，这也是默认值。对于匿名rsync服务器来说，一个理想的数字是600。<br />
refuse options</p>
<p>通过该选项可以定义一些不允许客户对该模块使用的命令参数列表。这里必须使用命令全名，而不能是简称。但发生拒绝某个命令的情况时服务器将报告错误信息然后退出。如果要防止使用压缩，应该是：”dont compress = *”。<br />
dont compress</p>
<p>用来指定那些不进行压缩处理再传输的文件，默认值是*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz</p>
<p>3.2 Rsync命令</p>
<p>在对rsync服务器配置结束以后，下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户端来。rsync是一个功能非常强大的工具，其命令也有很多功能特色选项，我们下面就对它的选项一一进行分析说明。</p>
<p>Rsync的命令格式可以为以下六种：<br />
rsync [OPTION]&#8230; SRC DEST</p>
<p>rsync [OPTION]&#8230; SRC [USER@]HOST:DEST</p>
<p>rsync [OPTION]&#8230; [USER@]HOST:SRC DEST</p>
<p>rsync [OPTION]&#8230; [USER@]HOST::SRC DEST</p>
<p>rsync [OPTION]&#8230; SRC [USER@]HOST::DEST</p>
<p>rsync [OPTION]&#8230; rsync://[USER@]HOST[:PORT]/SRC [DEST]<br />
对应于以上六种命令格式，rsync有六种不同的工作模式：</p>
<p>1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。如：rsync -a /data /backup</p>
<p>2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。如：rsync -avz *.c foo:src</p>
<p>3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。如：rsync -avz foo:src/bar /data</p>
<p>4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。如：rsync -av <a href="mailto:root@172.16.78.192::www">root@172.16.78.192::www</a> /databack</p>
<p>5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。如：rsync -av /databack <a href="mailto:root@172.16.78.192::www">root@172.16.78.192::www</a></p>
<p>6)列远程机的文件列表。这类似于rsync传输，不过只要在命令中省略掉本地机信息即可。如：rsync -v rsync://172.16.78.192/www<br />
rsync参数的具体解释如下：<br />
-v, &#8211;verbose 详细模式输出<br />
-q, &#8211;quiet 精简输出模式<br />
-c, &#8211;checksum 打开校验开关，强制对文件传输进行校验<br />
-a, &#8211;archive 归档模式，表示以递归方式传输文件，并保持所有文件属性，等于-rlptgoD<br />
-r, &#8211;recursive 对子目录以递归模式处理<br />
-R, &#8211;relative 使用相对路径信息<br />
-b, &#8211;backup 创建备份，也就是对于目的已经存在有同样的文件名时，将老的文件重新命名为~filename。可以使用&#8211;suffix选项来指定不同的备份文件前缀。<br />
&#8211;backup-dir 将备份文件(如~filename)存放在在目录下。<br />
-suffix=SUFFIX 定义备份文件前缀<br />
-u, &#8211;update 仅仅进行更新，也就是跳过所有已经存在于DST，并且文件时间晚于要备份的文件。(不覆盖更新的文件)<br />
-l, &#8211;links 保留软链结<br />
-L, &#8211;copy-links 想对待常规文件一样处理软链结<br />
&#8211;copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结<br />
&#8211;safe-links 忽略指向SRC路径目录树以外的链结<br />
-H, &#8211;hard-links 保留硬链结<br />
-p, &#8211;perms 保持文件权限<br />
-o, &#8211;owner 保持文件属主信息<br />
-g, &#8211;group 保持文件属组信息<br />
-D, &#8211;devices 保持设备文件信息<br />
-t, &#8211;times 保持文件时间信息<br />
-S, &#8211;sparse 对稀疏文件进行特殊处理以节省DST的空间<br />
-n, &#8211;dry-run现实哪些文件将被传输<br />
-W, &#8211;whole-file 拷贝文件，不进行增量检测<br />
-x, &#8211;one-file-system 不要跨越文件系统边界<br />
-B, &#8211;block-size=SIZE 检验算法使用的块尺寸，默认是700字节<br />
-e, &#8211;rsh=COMMAND 指定使用rsh、ssh方式进行数据同步<br />
&#8211;rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息<br />
-C, &#8211;cvs-exclude 使用和CVS一样的方法自动忽略文件，用来排除那些不希望传输的文件<br />
&#8211;existing 仅仅更新那些已经存在于DST的文件，而不备份那些新创建的文件<br />
&#8211;delete 删除那些DST中SRC没有的文件<br />
&#8211;delete-excluded 同样删除接收端那些被该选项指定排除的文件<br />
&#8211;delete-after 传输结束以后再删除<br />
&#8211;ignore-errors 及时出现IO错误也进行删除<br />
&#8211;max-delete=NUM 最多删除NUM个文件<br />
&#8211;partial 保留那些因故没有完全传输的文件，以是加快随后的再次传输<br />
&#8211;force 强制删除目录，即使不为空<br />
&#8211;numeric-ids 不将数字的用户和组ID匹配为用户名和组名<br />
&#8211;timeout=TIME IP超时时间，单位为秒<br />
-I, &#8211;ignore-times 不跳过那些有同样的时间和长度的文件<br />
&#8211;size-only 当决定是否要备份文件时，仅仅察看文件大小而不考虑文件时间<br />
&#8211;modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口，默认为0<br />
-T &#8211;temp-dir=DIR 在DIR中创建临时文件<br />
&#8211;compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份<br />
-P 等同于 &#8211;partial<br />
&#8211;progress 显示备份过程<br />
-z, &#8211;compress 对备份的文件在传输时进行压缩处理<br />
&#8211;exclude=PATTERN 指定排除不需要传输的文件模式<br />
&#8211;include=PATTERN 指定不排除而需要传输的文件模式<br />
&#8211;exclude-from=FILE 排除FILE中指定模式的文件<br />
&#8211;include-from=FILE 不排除FILE指定模式匹配的文件<br />
&#8211;version 打印版本信息<br />
&#8211;address 绑定到特定的地址<br />
&#8211;config=FILE 指定其他的配置文件，不使用默认的rsyncd.conf文件<br />
&#8211;port=PORT 指定其他的rsync服务端口<br />
&#8211;blocking-io 对远程shell使用阻塞IO<br />
-stats 给出某些文件的传输状态<br />
&#8211;progress 在传输时现实传输过程<br />
&#8211;log-format=formAT 指定日志文件格式<br />
&#8211;password-file=FILE 从FILE中得到密码<br />
&#8211;bwlimit=KBPS 限制I/O带宽，KBytes per second<br />
-h, &#8211;help 显示帮助信息</p>
<p>4、Rsync使用实例<br />
4.1、SSH方式</p>
<p>1、首先在服务端启动ssh服务：<br />
# service sshd start</p>
<p>启动 sshd： [确定]<br />
2、使用rsync进行同步</p>
<p>接下来就可以在客户端使用rsync命令来备份服务端上的数据了，SSH方式是通过系统用户来进行备份的，如下：<br />
# rsync -vzrtopg &#8211;progress -e ssh &#8211;delete <a href="mailto:work@172.16.78.192:/www/">work@172.16.78.192:/www/</a>* /databack/experiment/rsync</p>
<p><a href="mailto:work@172.16.78.192%20s">work@172.16.78.192&#8242;s</a> password:</p>
<p>receiving file list &#8230;</p>
<p>5 files to consider</p>
<p>test/</p>
<p>a</p>
<p>0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)</p>
<p>b</p>
<p>67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)</p>
<p>c</p>
<p>0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)</p>
<p>dd</p>
<p>100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)</p>
<p>sent 96 bytes received 98190 bytes 11563.06 bytes/sec</p>
<p>total size is 100663363 speedup is 1024.19<br />
上面的信息描述了整个的备份过程，以及总共备份数据的大小。<br />
4.2 、后台服务方式</p>
<p>1、启动rsync服务</p>
<p>编辑/etc/xinetd.d/rsync文件，将其中的disable=yes改为disable=no，并重启xinetd服务，如下：<br />
# vi /etc/xinetd.d/rsync</p>
<p>#default: off</p>
<p># description: The rsync server is a good addition to an ftp server, as it \</p>
<p># allows crc checksumming etc.</p>
<p>service rsync</p>
<p>{</p>
<p>disable = no</p>
<p>socket_type = stream</p>
<p>wait = no</p>
<p>user = root</p>
<p>server = /usr/bin/rsync</p>
<p>server_args = &#8211;daemon</p>
<p>log_on_failure += USERID</p>
<p>}</p>
<p># /etc/init.d/xinetd restart</p>
<p>停止 xinetd： [确定]</p>
<p>启动 xinetd： [确定]<br />
2、创建配置文件</p>
<p>默认安装好rsync程序后，并不会自动创建rsync的主配置文件，需要手工来创建，其主配置文件为“/etc/rsyncd.conf”，创建该文件并插入如下内容：<br />
# vi /etc/rsyncd.conf</p>
<p>uid=root</p>
<p>gid=root</p>
<p>max connections=4</p>
<p>log file=/var/log/rsyncd.log</p>
<p>pid file=/var/run/rsyncd.pid</p>
<p>lock file=/var/run/rsyncd.lock</p>
<p>secrets file=/etc/rsyncd.passwd</p>
<p>hosts deny=172.16.78.0/22</p>
<p>[www]</p>
<p>comment= backup <a href="http://www.5bay.cn/tag/web" class="st_tag internal_tag" rel="tag" title="标签 web 下的日志">web</a></p>
<p>path=/www</p>
<p>read only = no</p>
<p>exclude=test</p>
<p>auth users=work<br />
3、创建密码文件</p>
<p>采用这种方式不能使用系统用户对客户端进行认证，所以需要创建一个密码文件，其格式为“username:password”，用户名可以和密码可以随便定义，最好不要和系统帐户一致，同时要把创建的密码文件权限设置为600，这在前面的模块参数做了详细介绍。<br />
# echo “work:abc123&#8243; &gt; /etc/rsyncd.passwd</p>
<p># chmod 600 /etc/rsyncd.passwd<br />
4、备份</p>
<p>完成以上工作，现在就可以对数据进行备份了，如下：<br />
# rsync -avz &#8211;progress &#8211;delete <a href="mailto:work@172.16.78.192::www">work@172.16.78.192::www</a> /databack/experiment/rsync</p>
<p>Password:</p>
<p>receiving file list &#8230;</p>
<p>6 files to consider</p>
<p>./ files&#8230;</p>
<p>a</p>
<p>0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6)</p>
<p>b</p>
<p>67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6)</p>
<p>c</p>
<p>0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6)</p>
<p>dd</p>
<p>100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6)</p>
<p>sent 172 bytes received 98276 bytes 17899.64 bytes/sec</p>
<p>total size is 150995011 speedup is 1533.75<br />
5、恢复</p>
<p>当服务器的数据出现问题时，那么这时就需要通过客户端的数据对服务端进行恢复，但前提是服务端允许客户端有写入权限，否则也不能在客户端直接对服务端进行恢复，使用rsync对数据进行恢复的方法如下：<br />
# rsync -avz &#8211;progress /databack/experiment/rsync/ <a href="mailto:work@172.16.78.192::www">work@172.16.78.192::www</a></p>
<p>Password:</p>
<p>building file list &#8230;</p>
<p>6 files to consider</p>
<p>./</p>
<p>a</p>
<p>b</p>
<p>67 100% 0.00kB/s 0:00:00 (2, 66.7% of 6)</p>
<p>c</p>
<p>sent 258 bytes received 76 bytes 95.43 bytes/sec</p>
<p>total size is 150995011 speedup is 452080.87</p>
<p>5、示例脚本</p>
<p>这里这些脚本都是rsync网站上的例子：<br />
1、每隔七天将数据往中心服务器做增量备份<br />
#!/bin/sh<br />
# This script does personal backups to a rsync backup server. You will end up<br />
# with a 7 day rotating incremental backup. The incrementals will go<br />
# into subdirectories named after the day of the week, and the current<br />
# full backup goes into a directory called “current”<br />
# <a href="mailto:tridge@linuxcare.com">tridge@linuxcare.com</a><br />
# directory to backup<br />
BDIR=/home/$USER<br />
# excludes file &#8211; this contains a wildcard pattern per line of files to exclude<br />
EXCLUDES=$HOME/cron/excludes<br />
# the name of the backup machine<br />
BSERVER=owl<br />
# your password on the backup server<br />
export RSYNC_PASSWORD=XXXXXX<br />
########################################################################<br />
BACKUPDIR=`date +%A`<br />
OPTS=”&#8211;force &#8211;ignore-errors &#8211;delete-excluded &#8211;exclude-from=$EXCLUDES<br />
&#8211;delete &#8211;backup &#8211;backup-dir=/$BACKUPDIR -a”<br />
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin<br />
# the following line clears the last weeks incremental directory<br />
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir<br />
rsync &#8211;delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/<br />
rmdir $HOME/emptydir<br />
# now the actual transfer<br />
rsync $OPTS $BDIR $BSERVER::$USER/current<br />
2、备份至一个空闲的硬盘<br />
#!/bin/sh<br />
export PATH=/usr/local/bin:/usr/bin:/bin<br />
LIST=”rootfs usr data data2&#8243;<br />
for d in $LIST; do<br />
mount /backup/$d<br />
rsync -ax &#8211;exclude fstab &#8211;delete /$d/ /backup/$d/<br />
umount /backup/$d<br />
done<br />
DAY=`date “+%A”`<br />
rsync -a &#8211;delete /usr/local/apache /data2/backups/$DAY<br />
rsync -a &#8211;delete /data/solid /data2/backups/$DAY<br />
3、对vger.rutgers.edu的cvs树进行镜像<br />
#!/bin/bash<br />
cd /var/www/cvs/vger/<br />
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin<br />
RUN=`lps x | grep rsync | grep -v grep | wc -l`<br />
if [ "$RUN" -gt 0 ]; then<br />
echo already running<br />
exit 1<br />
fi<br />
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog<br />
sum1=`sum $HOME/ChangeLog`<br />
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`<br />
if [ "$sum1" = "$sum2" ]; then<br />
echo nothing to do<br />
exit 0<br />
fi<br />
rsync -az &#8211;delete &#8211;force vger.rutgers.edu::cvs/ /var/www/cvs/vger/<br />
exit 0<br />
6、FAQ</p>
<p>Q：如何通过ssh进行rsync，而且无须输入密码？</p>
<p>A：可以通过以下几个步骤<br />
1. 通过ssh-keygen在server A上建立SSH keys，不要指定密码，你会在~/.ssh下看到identity和identity.pub文件</p>
<p>2. 在server B上的home目录建立子目录.ssh</p>
<p>3. 将A的identity.pub拷贝到server B上</p>
<p>4. 将identity.pub加到~[user b]/.ssh/authorized_keys</p>
<p>5. 于是server A上的A用户，可通过下面命令以用户B ssh到server B上了</p>
<p>e.g. ssh -l userB serverB</p>
<p>这样就使server A上的用户A就可以ssh以用户B的身份无需密码登陆到server B上了。<br />
Q：如何通过在不危害安全的情况下通过防火墙使用rsync?</p>
<p>A：解答如下：<br />
这通常有两种情况，一种是服务器在防火墙内，一种是服务器在防火墙外。无论哪种情况，通常还是使用ssh，这时最好新建一个备份用户，并且配置sshd仅允许这个用户通过RSA认证方式进入。如果服务器在防火墙内，则最好限定客户端的IP地址，拒绝其它所有连接。如果客户机在防火墙内，则可以简单允许防火墙打开TCP端口22的ssh外发连接就ok了。<br />
Q：我能将更改过或者删除的文件也备份上来吗？</p>
<p>A：当然可以：<br />
你可以使用如：rsync -other -options -backupdir = ./backup-2000-2-13 &#8230;这样的命令来实现。</p>
<p>这样如果源文件:/path/to/some/file.c改变了，那么旧的文件就会被移到./backup-2000-2-13/path/to/some/file.c，</p>
<p>这里这个目录需要自己手工建立起来<br />
Q：我需要在防火墙上开放哪些端口以适应rsync？</p>
<p>A：视情况而定<br />
rsync可以直接通过873端口的tcp连接传文件，也可以通过22端口的ssh来进行文件传递，但你也可以通过下列命令改变它的端口：<br />
rsync &#8211;port 8730 otherhost::</p>
<p>或者</p>
<p>rsync -e &#8216;ssh -p 2002&#8242; otherhost:<br />
Q：我如何通过rsync只复制目录结构，忽略掉文件呢？</p>
<p>A：rsync -av &#8211;include &#8216;*/&#8217; &#8211;exclude &#8216;*&#8217; source-dir dest-dir<br />
Q：为什么我总会出现”Read-only file system”的错误呢？</p>
<p>A：看看是否忘了设”read only = no”了<br />
Q：为什么我会出现<a href="mailto:%20@ERROR">&#8216;@ERROR</a>: invalid gid&#8217;的错误呢？</p>
<p>A：rsync使用时默认是用uid=nobody;gid=nobody来运行的，如果你的系统不存在nobody组的话，就会出现这样的错误，可以试试gid = nogroup或者其它<br />
Q：绑定端口873失败是怎么回事？</p>
<p>A：如果你不是以root权限运行这一守护进程的话，因为1024端口以下是特权端口，会出现这样的错误。你可以用&#8211;port参数来改变。<br />
Q：为什么我认证失败？</p>
<p>A：从你的命令行看来：<br />
你用的是：<br />
&gt; bash$ rsync -a 144.16.251.213::test test</p>
<p>&gt; Password:</p>
<p>&gt; @ERROR: auth failed on module test</p>
<p>&gt;</p>
<p>&gt; I dont understand this. Can somebody explain as to how to acomplish this.</p>
<p>&gt; All suggestions are welcome.</p>
<p>应该是没有以你的用户名登陆导致的问题，试试rsync -a <a href="mailto:max@144.16.251.213::test">max@144.16.251.213::test</a> test</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/webshelleechueeee.html" title="Webshell下破解计算机管理员密码">Webshell下破解计算机管理员密码</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/nginxderewriteguize.html" title="nginx的rewrite规则">nginx的rewrite规则</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aspeaojie.html" title="ASP防注入新方式，希望对大家是有用的">ASP防注入新方式，希望对大家是有用的</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/include" title="include" rel="tag">include</a>, <a href="http://www.5bay.cn/tag/mod" title="mod" rel="tag">mod</a>, <a href="http://www.5bay.cn/tag/path" title="path" rel="tag">path</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/web" title="web" rel="tag">web</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%88%A4%E6%96%AD" title="判断" rel="tag">判断</a>, <a href="http://www.5bay.cn/tag/%E5%A4%B1%E8%B4%A5" title="失败" rel="tag">失败</a>, <a href="http://www.5bay.cn/tag/%E5%AE%9E%E4%BE%8B" title="实例" rel="tag">实例</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%B7%A5%E5%85%B7" title="工具" rel="tag">工具</a>, <a href="http://www.5bay.cn/tag/%E6%90%9C%E7%B4%A2" title="搜索" rel="tag">搜索</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%9B%B4%E6%96%B0" title="更新" rel="tag">更新</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E6%BA%90%E4%BB%A3%E7%A0%81" title="源代码" rel="tag">源代码</a>, <a href="http://www.5bay.cn/tag/%E7%89%88%E6%9C%AC" title="版本" rel="tag">版本</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E7%BD%91%E7%AB%99" title="网站" rel="tag">网站</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8" title="表" rel="tag">表</a>, <a href="http://www.5bay.cn/tag/%E8%AF%B4%E6%98%8E" title="说明" rel="tag">说明</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%93%BE%E6%8E%A5" title="链接" rel="tag">链接</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%95%9C%E5%83%8F" title="镜像" rel="tag">镜像</a>, <a href="http://www.5bay.cn/tag/%E9%9A%90%E8%97%8F" title="隐藏" rel="tag">隐藏</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/rsyncxiangjie.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql优化及全文搜索</title>
		<link>http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html</link>
		<comments>http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html#comments</comments>
		<pubDate>Sat, 22 May 2010 21:29:20 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[服务器构建&安全]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[div]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[session]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[兼容]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[含义]]></category>
		<category><![CDATA[密码]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[引入]]></category>
		<category><![CDATA[成功]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[操作系统]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[最快]]></category>
		<category><![CDATA[版本]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[解决]]></category>
		<category><![CDATA[连接]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[镜像]]></category>
		<category><![CDATA[页面]]></category>

		<guid isPermaLink="false">http://www.5bay.cn/?p=373</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>mysql my.cnf文件常见优化模块 [mysqld] port = 3306 server-id = 1 socket = /tmp/mysql.sock # 避免MySQL的外部锁定，减少出错几率增强稳定性。 skip-locking # 禁止MySQL对外部连接进行DNS解析 skip-name-resolve # 指定MySQL可能的连接数量 back_log = 256 # 使用查询缓冲 query_cache_size = 32M query_cache_type= 1 # 指定用于索引的缓冲区大小 对于内存在4GB左右的服务器该参数可设置为256M或384M key_reads / key_read_requests 至少是1:100，1:1000更好 key_buffer_size = 256M # 允许的请求包大小 max_allowed_packet = 4M # 缓存可重用的线程数 thread_cache = 256 thread_cache_size = 64 # 每个线程的栈大小 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.5bay.cn/tag/mysql" class="st_tag internal_tag" rel="tag" title="标签 mysql 下的日志">mysql</a> my.cnf文件常见优化模块<br />
[mysqld]<br />
port = 3306<br />
server-id = 1<br />
socket = /tmp/mysql.sock</p>
<p># 避免MySQL的外部锁定，减少出错几率增强稳定性。<br />
skip-locking</p>
<p># 禁止MySQL对外部连接进行DNS解析<br />
skip-name-resolve</p>
<p># 指定MySQL可能的连接数量<br />
back_log = 256<br />
<span id="more-373"></span><br />
# 使用查询缓冲<br />
query_cache_size = 32M<br />
query_cache_type= 1</p>
<p># 指定用于索引的缓冲区大小 对于内存在4GB左右的服务器该参数可设置为256M或384M key_reads / key_read_requests 至少是1:100，1:1000更好<br />
key_buffer_size = 256M</p>
<p># 允许的请求包大小<br />
max_allowed_packet = 4M</p>
<p># 缓存可重用的线程数<br />
thread_cache = 256<br />
thread_cache_size = 64</p>
<p># 每个线程的栈大小<br />
thread_stack = 256K</p>
<p># 指定表高速缓存的大小 对于有1G内存的机器，推荐值是128－256<br />
table_cache = 256K</p>
<p># 查询排序时所能使用的缓冲区大小 每连接独占<br />
sort_buffer_size = 6M</p>
<p># 读查询操作所能使用的缓冲区大小 每连接独占<br />
read_buffer_size = 4M</p>
<p># 联合查询操作所能使用的缓冲区大小 每连接独占<br />
join_buffer_size = 8M</p>
<p>#MyISAM表发生变化时重新排序所需的缓冲<br />
myisam_sort_buffer_size = 64M</p>
<p># 指定MySQL查询缓冲区的大小<br />
query_cache_size = 64M</p>
<p>tmp_table_size = 256M</p>
<p># 指定MySQL允许的最大连接进程数<br />
max_connections = 768</p>
<p>max_connect_errors = 10000000</p>
<p># 指定一个请求的最大连接时间<br />
wait_timeout = 10</p>
<p># 该参数取值为服务器逻辑CPU数量×2<br />
thread_concurrency = 8</p>
<p>#记录慢查询,然后对慢查询一一优化<br />
log-slow-queries = slow.log<br />
long_query_time = 2<br />
log-queries-not-using-indexes</p>
<p>#关闭不需要的表类型,如果你需要,就不要加上这个<br />
skip-innodb<br />
skip-bdb<br />
#指定用于索引的缓冲区大小，增加它可得到更好的索引处理性能。     对于内存在4GB左右的服务器该参数可设置为256M或384M。     注意：该参数值设置的过大反而会是服务器整体效率降低！<br />
key_buffer_size = 256M</p>
<p>MySQL server has gone away 的解决办法</p>
<p>有时候使用MySQL(和PHP搭配之最佳组合)命令行导入备份时会出现“MySQL(和PHP搭配之最佳组合) server has gone away”错误，这可能是因为其中一些insert语句的大小超出了MySQL(和PHP搭配之最佳组合)目前设置的缓冲区大小。</p>
<p>解决办法</p>
<p>1.使用php(做为现在的主流开发语言)myadmin 备份MySQL(和PHP搭配之最佳组合)的时候，只选择</p>
<p><a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" class="st_tag internal_tag" rel="tag" title="标签 数据 下的日志">数据</a>:<br />
     完整插入<br />
     扩展插入</p>
<p>扩展插入不要勾选</p>
<p>2.使用 MySQL(和PHP搭配之最佳组合)dump 备份的时候不添加 &#8211;opt  </p>
<p>这样就只会生成完整的insert语句，导入时候不会出错。</p>
<p>3.修改my.ini</p>
<p>打开my.ini 找到[MySQL(和PHP搭配之最佳组合)d]这一行，下面添加</p>
<p>[MySQL(和PHP搭配之最佳组合)d]</p>
<p>#扩大缓冲区<br />
max_allowed_packet=32M  <br />
保存后，重启MySQL(和PHP搭配之最佳组合)</p>
<div>
<p>my.cnf配置(转)</p>
<p>mysqld程序&#8211;目录和文件<br />
basedir = path 使用给定目录作为根目录(安装目录)。<br />
character-sets-dir = path 给出存放着字符集的目录。<br />
datadir = path 从给定目录读取数据库文件。<br />
pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。<br />
socket = filename 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般<br />
是/var/lib/mysql/mysql.sock文件)。<br />
在Windows环境下，如果MySQL客户与服务器是通过命名管道进行通信的，&#8211;sock选项给出的将是该命名管道的名字(默认设置是MySQL)。 lower_case_table_name = 1/0 新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母)。<br />
mysqld程序&#8211;语言设置<br />
character-sets-server = name 新数据库或数据表的默认字符集。为了与MySQL的早期版本保持兼容，这个字符集也可以用&#8211;default-character-set选项给出; 但这个选项已经显得有点过时了。<br />
collation-server = name 新数据库或数据表的默认排序方式。<br />
lanuage = name 用指定的语言显示出错信息。<br />
mysqld程序&#8211;通信、网络、信息安全<br />
enable-named-pipes 允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信。这个命名管道的默认名字是MySQL，但可以用&#8211;socket选项来改变。<br />
local-infile [=0] 允许/禁止使用LOAD DATA LOCAL语句来处理本地文件。<br />
myisam-recover [=opt1, opt2, ...] 在启动时自动修复所有受损的MyISAM数据表。这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同。<br />
old-passwords 使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法)。 port = n 为MySQL程序指定一个TCP/IP通信端口(通常是3306端口)。<br />
safe-user-create 只有在mysql.user数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令)。<br />
shared-memory 允许使用内存(shared memory)进行通信(仅适用于Windows)。<br />
shared-memory-base-name = name 给共享内存块起一个名字(默认的名字是MySQL)。<br />
skip-grant-tables 不使用mysql数据库里的信息来进行访问控制(警告:这将允许用户任何用户去修改任何数据库)。<br />
skip-host-cache 不使用高速缓存区来存放主机名和IP地址的对应关系。<br />
skip-name-resovle 不把IP地址解析为主机名; 与访问控制(mysql.user数据表)有关的检查全部通过IP地址行进。<br />
skip-networking 只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接，不允许ICP/IP连接; 这提高了安全性，但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。<br />
user = name mysqld程序在启动后将在给定UNIX/Linux账户下执行; mysqld必须从root账户启动才能在启动后切换到另一个账户下执行;<br />
mysqld_safe脚本将默认使用&#8211;user=mysql选项来启动mysqld程序。<br />
mysqld程序&#8211;内存管理、优化、查询缓存区<br />
bulk_insert_buffer_size = n 为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M)。<br />
key_buffer_size = n 用来存放索引区块的RMA值(默认设置是8M)。<br />
join_buffer_size = n 在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。<br />
max_heap_table_size = n HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里。<br />
max_connections = n MySQL服务器同时处理的数据库连接的最大数量(默认设置是100)。<br />
query_cache_limit = n 允许临时存放在查询缓存区里的查询结果的最大长度(默认设置是1M)。<br />
query_cache_size = n 查询缓存区的最大长度(默认设置是0，不开辟查询缓存区)。<br />
query_cache_type = 0/1/2 查询缓存区的工作模式:0, 禁用查询缓存区; 1，启用查询缓存区(默认设置); 2，”按需分配”模式，只响应SELECT SQL_CACHE命令。<br />
read_buffer_size = n 为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时可以用SQL命令SET <a href="http://www.5bay.cn/tag/session" class="st_tag internal_tag" rel="tag" title="标签 session 下的日志">SESSION</a> read_buffer_size = n命令加以改变。<br />
read_rnd_buffer_size = n 类似于read_buffer_size选项，但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。<br />
sore_buffer = n 为排序操作分配的缓存区的长度(默认设置是2M); 如果这个缓存区太小，则必须创建一个临时文件来进行排序。<br />
table_cache = n 同时打开的数据表的数量(默认设置是64)。<br />
tmp_table_size = n 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。<br />
mysqld程序&#8211;日志<br />
log [= file] 把所有的连接以及所有的SQL命令记入日志(通用查询日志); 如果没有给出file参数，MySQL将在数据库目录里创建一个hostname.log文件作为这种日志文件(hostname是服务器的主机名)。<br />
log-slow-queries [= file] 把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 如果没有给出file参数，MySQL将在数据库目录里创建一个hostname-slow.log文件作为这种日志文件(hostname是服务器主机名)。<br />
long_query_time = n 慢查询的执行用时上限(默认设置是10s)。<br />
long_queries_not_using_indexs 把慢查询以及执行时没有使用索引的查询命令全都记入日志(其余同&#8211;log-slow-queries选项)。<br />
log-bin [= filename] 把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志，binary update log)。这种日志的文件名是filename.n或默认的hostname.n，其中n是一个6位数字的整数(日志文件按顺序编号)。<br />
log-bin-index = filename 二进制日志功能的索引文件名。在默认情况下，这个索引文件与二进制日志文件的名字相同，但后缀名是.index而不是.nnnnnn。<br />
max_binlog_size = n 二进制日志文件的最大长度(默认设置是1GB)。在前一个二进制日志文件里的信息量超过这个最大长度之前，MySQL服务器会自动提供一个新的二进制日志文件接续上。<br />
binlog-do-db = dbname 只把给定数据库里的变化情况记入二进制日志文件，其他数据库里的变化情况不记载。如果需要记载多个数据库里的变化情况，就必须在配置文件使用多个本选项来设置，每个数据库一行。<br />
binlog-ignore-db = dbname 不把给定数据库里的变化情况记入二进制日志文件。<br />
sync_binlog = n 每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法，但效率最低。默认设置是n=0，意思是由操作系统来负责二进制日志文件的同步工作。<br />
log-update [= file] 记载出错情况的日志文件名(出错日志)。这种日志功能无法禁用。如果没有给出file参数，MySQL会使用hostname.err作为种日志文件的名字。<br />
mysqld程序&#8211;镜像(主控镜像服务器)<br />
server-id = n 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。<br />
log-bin = name 启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n，其中的n是一个6位数字的整数(日志文件顺序编号)。<br />
binlog-do/ignore-db = dbname 只把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。<br />
mysqld程序&#8211;镜像(从属镜像服务器)<br />
server-id = n 给服务器分配一个唯一的ID编号<br />
log-slave-updates 启用从属服务器上的日志功能，使这台计算机可以用来构成一个镜像链(A-&gt;B-&gt;C)。<br />
master-host = hostname 主控服务器的主机名或IP地址。如果从属服务器上存在mater.info文件(镜像关系定义文件)，它将忽略此选项。<br />
master-user = replicusername 从属服务器用来连接主控服务器的用户名。如果从属服务器上存在mater.info文件，它将忽略此选项。<br />
master-password = passwd 从属服务器用来连接主控服务器的密码。如果从属服务器上存在mater.info文件，它将忽略此选项。<br />
master-port = n 从属服务器用来连接主控服务器的TCP/IP端口(默认设置是3306端口)。<br />
master-connect-retry = n 如果与主控服务器的连接没有成功，则等待n秒(s)后再进行管理方式(默认设置是60s)。如果从属服务器存在mater.info文件，它将忽略此选项。<br />
master-ssl-xxx = xxx 对主、从服务器之间的SSL通信进行配置。<br />
read-only = 0/1 0: 允许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的SQL命令。<br />
read-log-purge = 0/1 1: 把处理完的SQL命令立刻从中继日志文件里删除(默认设置); 0: 不把处理完的SQL命令立刻从中继日志文件里删除。<br />
replicate-do-table = dbname.tablename 与&#8211;replicate-do-table选项的含义和用法相同，但数据库和数据库表名字里允许出现通配符”%” (例如: test%.%&#8211;对名字以”test”开头的所有数据库里的所以数据库表进行镜像处理)。<br />
replicate-do-db = name 只对这个数据库进行镜像处理。<br />
replicate-ignore-table = dbname.tablename 不对这个数据表进行镜像处理。<br />
replicate-wild-ignore-table = dbn.tablen 不对这些数据表进行镜像处理。<br />
replicate-ignore-db = dbname 不对这个数据库进行镜像处理。<br />
replicate-rewrite-db = db1name &gt; db2name 把主控数据库上的db1name数据库镜像处理为从属服务器上的db2name数据库。<br />
report-host = hostname 从属服务器的主机名; 这项信息只与SHOW SLAVE HOSTS命令有关&#8211;主控服务器可以用这条命令生成一份从属服务器的名单。<br />
slave-compressed-protocol = 1 主、从服务器使用压缩格式进行通信&#8211;如果它们都支持这么做的话。<br />
slave-skip-errors = n1, n2, &#8230;或all 即使发生出错代码为n1、n2等的错误，镜像处理工作也继续进行(即不管发生什么错误，镜像处理工作也继续进行)。<br />
如果配置得当，从属服务器不应该在执行SQL命令时发生错误(在主控服务器上执行出错的SQL命令不会被发送到从属服务器上做镜像处理); 如果不使用<br />
slave-skip-errors选项，从属服务器上的镜像工作就可能国为发生错误而中断，中断后需要有人工参与才能继续进行。<br />
mysqld&#8211;InnoDB&#8211;基本设置、表空间文件<br />
skip-innodb 不加载InnoDB数据表驱动程序&#8211;如果用不着InnoDB数据表，可以用这个选项节省一些内存。<br />
innodb-file-per-table 为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里(后者是默认设置)。该选项始见于MySQL 4.1。<br />
innodb-open-file = n InnoDB数据表驱动程序最多可以同时打开的文件数(默认设置是300)。如果使用了innodb-file-per-table选项并且需要同时打开很多数据表的话，这个数字很可能需要加大。<br />
innodb_data_home_dir = p InnoDB主目录，所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下，这个主目录就是MySQL的数据目录。<br />
innodb_data_file_path = ts 用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。<br />
例如，ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空间文件ibdata1的最大长度是1GB，ibdata2的最大长度也是1G，但允许它扩充到2GB。<br />
除文件名外，还可以用硬盘分区的设置名来定义表空间，此时必须给表空间的最大初始长度值加上newraw关键字做后缀，给表空间的最大扩充长度值加上raw关键字做后缀(例如/dev/hdb1:20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默认设置是ibdata1:10M:autoextend。<br />
innodb_autoextend_increment = n 带有autoextend属性的表空间文件每次加大多少兆字节(默认设置是8MB)。这个属性不涉及具体的数据表文件，那些文件的增大速度相对是比较小的。<br />
innodb_lock_wait_timeout = n 如果某个事务在等待n秒(s)后还没有获得所需要的资源，就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。<br />
innodb_fast_shutdown 0/1 是否以最快的速度关闭InnoDB，默认设置是1，意思是不把缓存在INSERT缓存区的数据写入数据表，那些数据将在MySQL服务器下次启动时再写入(这么做没有什么风险，因为INSERT缓存区是表空间的一个组成部分，数据不会丢失)。把这个选项设置为0反面危险，因为在计算机关闭时，InnoDB驱动程序很可能没有足够的时间完成它的数据同步工作，操作系统也许会在它完成数据同步工作之前强行结束InnoDB，而这会导致数据不完整。<br />
mysqld程序&#8211;InnoDB&#8211;日志<br />
innodb_log_group_home_dir = p 用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下，InnoDB驱动程序将使用MySQL数据目录作为自己保存日志文件的位置。<br />
innodb_log_files_in_group = n 使用多少个日志文件(默认设置是2)。InnoDB数据表驱动程序将以轮转方式依次填写这些文件; 当所有的日志文件都写满以后，之后的日志信息将写入第一个日志文件的最大长度(默认设置是5MB)。这个长度必须以MB(兆字节)或GB(千兆字节)为单位进行设置。<br />
innodb_flush_log_at_trx_commit = 0/1/2 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日志并进行同步，这可以减少硬盘写操作次数，但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步，这可以防止数据丢失，但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法，即每执行完一条COMMIT命令写一次日志，每隔一秒进行一次同步。<br />
innodb_flush_method = x InnoDB日志文件的同步办法(仅适用于UNIX/Linux系统)。这个选项的可取值有两种: fdatasync，用fsync()函数进行同步; O_DSYNC，用O_SYNC()函数进行同步。<br />
innodb_log_archive = 1 启用InnoDB驱动程序的archive(档案)日志功能，把日志信息写入ib_arch_log_n文件。启用这种日志功能在InnoDB与MySQL一起使用时没有多大意义(启用MySQL服务器的二进制日志功能就足够用了)。<br />
mysqld程序&#8211;InnoDB&#8211;缓存区的设置和优化<br />
innodb_log_buffer_pool_size = n 为InnoDB数据表及其索引而保留的RAM内存量(默认设置是8MB)。这个参数对速度有着相当大的影响，如果计算机上只运行有MySQL/InnoDB数据库服务器，就应该把全部内存的80%用于这个用途。<br />
innodb_log_buffer_size = n 事务日志文件写操作缓存区的最大长度(默认设置是1MB)。<br />
innodb_additional_men_pool_size = n 为用于内部管理的各种数据结构分配的缓存区最大长度(默认设置是1MB)。<br />
innodb_file_io_threads = n I/O操作(硬盘写操作)的最大线程个数(默认设置是4)。<br />
innodb_thread_concurrency = n InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。<br />
mysqld程序&#8211;其它选项</p>
<p>bind-address = ipaddr MySQL服务器的IP地址。如果MySQL服务器所在的计算机有多个IP地址，这个选项将非常重要。<br />
default-storage-engine = type 新数据表的默认数据表类型(默认设置是MyISAM)。这项设置还可以通过&#8211;default-table-type选项来设置。<br />
default-timezone = name 为MySQL服务器设置一个地理时区(如果它与本地计算机的地理时区不一样)。<br />
ft_min_word_len = n 全文索引的最小单词长度工。这个选项的默认设置是4，意思是在创建全文索引时不考虑那些由3个或更少的字符构建单词。<br />
Max-allowed-packet = n 客户与服务器之间交换的数据包的最大长度，这个数字至少应该大于客户程序将要处理的最大BLOB块的长度。这个选项的默认设置是1MB。<br />
Sql-mode = model1, mode2, &#8230; MySQL将运行在哪一种SQL模式下。这个选项的作用是让MySQL与其他的数据库系统保持最大程度的兼容。这个选项的可取值包括ansi、db2、oracle、no_zero_date、pipes_as_concat。<br />
注意：如果在配置文件里给出的某个选项是mysqld无法识别的(如，因为犯了一个愚蠢的打字错误)，MySQL服务器将不启动。</p>
<div>
<p>MySQL的系统变量以调优性能</p>
<p>(1)、back_log：<br />
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求，这就起作用，然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。<br />
back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接，你需要增加它，换句话说，这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 试图设定back_log高于你的操作系统的限制将是无效的。<br />
当你观察你的主机进程列表，发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时，就要加大 back_log 的值了。默认数值是50，我把它改为500。</p>
<p>(2)、interactive_timeout：<br />
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800，我把它改为7200。</p>
<p>(3)、key_buffer_size：<br />
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小，增加它可得到更好处理的索引(对所有读和多重写)，到你能负担得起那样多。如果你使它太大，系统将开始换页并且真的变慢了。默认数值是8388600(8M)，我的MySQL主机有2GB内存，所以我把它改为 402649088(400MB)。</p>
<p>(4)、max_connections：<br />
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加，否则，你将经常看到 Too many connections 错误。 默认数值是100，我把它改为1024 。</p>
<p>(5)、record_buffer：<br />
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描，你可能想要增加该值。默认数值是131072(128K)，我把它改为16773120 (16M)</p>
<p>(6)、sort_buffer：<br />
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M)，我把它改为 16777208 (16M)。</p>
<p>(7)、table_cache：<br />
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64，我把它改为512。</p>
<p>(8)、thread_cache_size：<br />
可以复用的保存在中的线程的数量。如果有，新的线程从缓存中取得，当断开连接的时候如果有空间，客户的线置在缓存中。如果有很多新的线程，为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量，可以看到这个变量的作用。我把它设置为 80。</p>
<p>(10)、wait_timeout：<br />
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800，我把它改为7200。</p>
<p>注：参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作，上面的结果也仅仅是我的一些看法，你可以根据你自己主机的硬件情况（特别是内存大小）进一步修改。</p>
<div>
<p>MySQL 的max_allowed_packet保护导致MySQL Server 不断的启停</p>
<p>那到底是什么原因造成MySQL死掉又启来呢？</p>
<p>如果MySQL能够正常自动启动，那访问这个页面对MySQL的影响是数据库系统可以自动识别出来的，出于一种自动保护的原因，它才会shutdown MySQL.</p>
<p>基于以上的原因，开始查找资料，看都有在哪些情况下MySQL会自动shutdown后又立即startup的。<br />
  <br />
首先想到的是buffer(read,sort,temp etc.)不足，那么修改配置文件，把它们都增大一倍后重启MySQL，还是同样的会死掉。</p>
<p>接下来想到的就是可能请求的连接包过大，检查配置文件，其中并没有max_allowed_packet声明。在配置文件中，设置max_allowed_packet=2M后，重新启动MySQL，问题解决！</p>
<p>呵呵，看来mysql的配置文件中还有很多内容可挖的哟，以后得多多注意了。</p>
</div>
</div>
</div>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eeeeeeee.html" title="最令PHP初学者头痛的十四个问题">最令PHP初学者头痛的十四个问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeecketee.html" title="PHP和Socket简介">PHP和Socket简介</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeeeeeeeehuai.html" title="PHP对文本数据库的基本操作方法">PHP对文本数据库的基本操作方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eejaxeeeeee.html" title="使用Ajax时的十个常犯的错误">使用Ajax时的十个常犯的错误</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpfengzhuangchangyongjavascriptweijsleiyibiankuaisudiaoyong.html" title="PHP封装常用Javascript为JS类以便快速调用">PHP封装常用Javascript为JS类以便快速调用</a> (1)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/eacceleratoryumemcachedequbieyuyongtu.html" title="eAccelerator与memcache的区别与用途">eAccelerator与memcache的区别与用途</a> (2)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/aoeempirebakeebshell.html" title="帝国备份王(Empirebak)拿webshell">帝国备份王(Empirebak)拿webshell</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeefangeredoc.html" title="php的文档句法(heredoc)<<<和PHP字符串操作">php的文档句法(heredoc)<<<和PHP字符串操作</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/cache" title="cache" rel="tag">cache</a>, <a href="http://www.5bay.cn/tag/div" title="div" rel="tag">div</a>, <a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/mod" title="mod" rel="tag">mod</a>, <a href="http://www.5bay.cn/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.5bay.cn/tag/path" title="path" rel="tag">path</a>, <a href="http://www.5bay.cn/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.5bay.cn/tag/server" title="server" rel="tag">server</a>, <a href="http://www.5bay.cn/tag/session" title="session" rel="tag">session</a>, <a href="http://www.5bay.cn/tag/sql" title="sql" rel="tag">sql</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E4%BB%A3%E7%A0%81" title="代码" rel="tag">代码</a>, <a href="http://www.5bay.cn/tag/%E5%85%BC%E5%AE%B9" title="兼容" rel="tag">兼容</a>, <a href="http://www.5bay.cn/tag/%E5%87%BD%E6%95%B0" title="函数" rel="tag">函数</a>, <a href="http://www.5bay.cn/tag/%E5%90%AB%E4%B9%89" title="含义" rel="tag">含义</a>, <a href="http://www.5bay.cn/tag/%E5%AF%86%E7%A0%81" title="密码" rel="tag">密码</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%BC%95%E5%85%A5" title="引入" rel="tag">引入</a>, <a href="http://www.5bay.cn/tag/%E6%88%90%E5%8A%9F" title="成功" rel="tag">成功</a>, <a href="http://www.5bay.cn/tag/%E6%90%9C%E7%B4%A2" title="搜索" rel="tag">搜索</a>, <a href="http://www.5bay.cn/tag/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F" title="操作系统" rel="tag">操作系统</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE%E5%BA%93" title="数据库" rel="tag">数据库</a>, <a href="http://www.5bay.cn/tag/%E6%9C%80%E5%BF%AB" title="最快" rel="tag">最快</a>, <a href="http://www.5bay.cn/category/server-building" title="服务器构建&amp;安全" rel="tag">服务器构建&amp;安全</a>, <a href="http://www.5bay.cn/tag/%E7%89%88%E6%9C%AC" title="版本" rel="tag">版本</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8" title="表" rel="tag">表</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3" title="解决" rel="tag">解决</a>, <a href="http://www.5bay.cn/tag/%E8%BF%9E%E6%8E%A5" title="连接" rel="tag">连接</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%95%9C%E5%83%8F" title="镜像" rel="tag">镜像</a>, <a href="http://www.5bay.cn/tag/%E9%A1%B5%E9%9D%A2" title="页面" rel="tag">页面</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>服务器消息的广播</title>
		<link>http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html</link>
		<comments>http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html#comments</comments>
		<pubDate>Fri, 17 Oct 2008 17:23:42 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[游戏开发]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[判断]]></category>
		<category><![CDATA[对象]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[数据]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[解决]]></category>

		<guid isPermaLink="false">?p=301</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>MMO 的 engine 中，需要解决的最重要的问题之一，就是如何把游戏世界中的状态改变消息正确的通知给需要知道这条信息的玩家。通常，我们会设定每个玩家的 AOI ( Area Of Interest )。当一个对象发生改变时，它会把消息广播出去；那些 AOI 覆盖到它的玩家会收到这些广播消息。但是，在我们现在的游戏系统中，简单的 AOI 系统是不够用的。比如，类似 wow 中的盗贼隐身，明明已经离你很近，但是你的 client 却看不见他。诚然，我们可以在 client 判断这个逻辑，对盗贼不于显示，而 engine 依然广播盗贼移动的消息。对于不作弊的 client ，这是个简单的解决方案。但在理论上却提供了看见隐身人的可能性，所以，我期望有更好的方法让 engine 可以只将消息广播到那些必须接收这些消息的 client 。但是，在实现这个同时，又不能让底层 engine 牵扯太多逻辑信息。这里提出一个简单的方案：基本的 AOI 系统中，对象只有方位坐标是为 AOI 模块所知的。如果希望让每个玩家的视野有所不同，对于观察者（玩家）可能还需要多设定一个视野半径的参数。如上面举出的盗贼隐身一例，解决那种逻辑这些数据是不够的。我所构想的系统中，观察者有两个参数，雷达半径和雷达强度；而被观察者除了坐标外，还有一个信号半径的参数。（这里，玩家通常既是观察者又是被观察者；而 npc 是纯粹的被观察者）雷达半径就是前面所说的视野半径；而雷达强度决定了在离目标一定距离时，可以分辨的最大尺寸的物体。这个尺寸当然不是指对象的模型大小，而是指被观察者的信号半径。有了这几组数据，我们就可以决定被观察者是否为观察者所见。通常，雷达半径、强度，和物体的信号半径都是不变的。但是，游戏逻辑可以根据需要来改变它们；比如通过装备、升级、战斗时 buffer 等等。不过底层 engine 不需要了解这些逻辑的细节，只需要把基本参数拿出来算一下就可以确定了。我们把这些属性绑定在对象上，由 engine 决定对象的远程方法应该发给哪些人。进一步的，我们可以给对象的每个远程方法加一个权值，以优化网络通讯。比如，人物对象可以有一些诸如挥手一类的 emote 行为，可以有一个较低的信号半径权值。当一个玩家可以看见 500m 外的一个人物时，或许这个人物正在做的挥手动作他还看不见；直到他们接近到 250m 时才能收到挥手的消息。这样的系统，对于 3d 第一人称的 mmo 或许会有用。了解过我们公司另一个项目没能很好的解决这个问题，写此文将自己的想法记录之。 相关博文2010年05月23日 -- Rsync详解 [...]]]></description>
			<content:encoded><![CDATA[<p>MMO 的 engine 中，需要解决的最重要的问题之一，就是如何把游戏世界中的状态改变消息正确的通知给需要知道这条信息的玩家。<br/><br/>通常，我们会设定每个玩家的 AOI ( Area Of Interest )。当一个对象发生改变时，它会把消息广播出去；那些 AOI 覆盖到它的玩家会收到这些广播消息。<br/><br/>但是，在我们现在的游戏系统中，简单的 AOI 系统是不够用的。比如，类似 wow 中的盗贼隐身，明明已经离你很近，但是你的 client 却看不见他。诚然，我们可以在 client 判断这个逻辑，对盗贼不于显示，而 engine 依然广播盗贼移动的消息。对于不作弊的 client ，这是个简单的解决方案。但在理论上却提供了看见隐身人的可能性，所以，我期望有更好的方法让 engine 可以只将消息广播到那些必须接收这些消息的 client 。但是，在实现这个同时，又不能让底层 engine 牵扯太多逻辑信息。<span id="more-301"></span><br/><br/>这里提出一个简单的方案：<br/><br/>基本的 AOI 系统中，对象只有方位坐标是为 AOI 模块所知的。如果希望让每个玩家的视野有所不同，对于观察者（玩家）可能还需要多设定一个视野半径的参数。如上面举出的盗贼隐身一例，解决那种逻辑这些数据是不够的。<br/><br/>我所构想的系统中，观察者有两个参数，雷达半径和雷达强度；而被观察者除了坐标外，还有一个信号半径的参数。（这里，玩家通常既是观察者又是被观察者；而 npc 是纯粹的被观察者）<br/><br/>雷达半径就是前面所说的视野半径；而雷达强度决定了在离目标一定距离时，可以分辨的最大尺寸的物体。这个尺寸当然不是指对象的模型大小，而是指被观察者的信号半径。<br/><br/>有了这几组数据，我们就可以决定被观察者是否为观察者所见。通常，雷达半径、强度，和物体的信号半径都是不变的。但是，游戏逻辑可以根据需要来改变它们；比如通过装备、升级、战斗时 buffer 等等。不过底层 engine 不需要了解这些逻辑的细节，只需要把基本参数拿出来算一下就可以确定了。<br/><br/>我们把这些属性绑定在对象上，由 engine 决定对象的远程方法应该发给哪些人。进一步的，我们可以给对象的每个远程方法加一个权值，以优化网络通讯。比如，人物对象可以有一些诸如挥手一类的 emote 行为，可以有一个较低的信号半径权值。当一个玩家可以看见 500m 外的一个人物时，或许这个人物正在做的挥手动作他还看不见；直到他们接近到 250m 时才能收到挥手的消息。<br/><br/>这样的系统，对于 3d 第一人称的 mmo 或许会有用。了解过我们公司另一个项目没能很好的解决这个问题，写此文将自己的想法记录之。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%95%B0%E6%8D%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E8%AE%BE%E8%AE%A1.html" title="数据服务器的设计">数据服务器的设计</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E4%BB%A5%E4%BA%BA%E4%B8%BA%E6%9C%AC%EF%BC%8C%E7%BE%8E%E6%9C%AF%E8%B5%84%E6%BA%90%E7%9A%84%E5%BD%92%E6%A1%A3.html" title="以人为本，美术资源的归档">以人为本，美术资源的归档</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%80%9D%E7%BB%B4%E7%9A%84%E6%83%AF%E6%80%A7.html" title="思维的惯性">思维的惯性</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxxuan.html" title="ajax的缺点">ajax的缺点</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E7%94%A8%E5%9B%9B%E5%8F%89%E6%A0%91%E7%AE%A1%E7%90%86%E6%95%A3%E5%B8%83%E5%9C%A8%E5%B9%B3%E9%9D%A2%E4%B8%8A%E7%9A%84%E5%AF%B9%E8%B1%A1.html" title="用四叉树管理散布在平面上的对象">用四叉树管理散布在平面上的对象</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F%E7%9A%84%E5%AF%B9%E6%97%B6%E4%BB%A5%E5%8F%8A%E5%90%8C%E6%AD%A5%E9%97%AE%E9%A2%98.html" title="网络游戏的对时以及同步问题">网络游戏的对时以及同步问题</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E4%B8%AD%E7%9A%84%E8%B4%A7%E5%B8%81.html" title="游戏中的货币">游戏中的货币</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/ie" title="ie" rel="tag">ie</a>, <a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E5%88%A4%E6%96%AD" title="判断" rel="tag">判断</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1" title="对象" rel="tag">对象</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%95%B0%E6%8D%AE" title="数据" rel="tag">数据</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B8%B8%E6%88%8F" title="游戏" rel="tag">游戏</a>, <a href="http://www.5bay.cn/category/game-development" title="游戏开发" rel="tag">游戏开发</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%A7%A3%E5%86%B3" title="解决" rel="tag">解决</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>角色动作控制接口的设计</title>
		<link>http://www.5bay.cn/game-development/%E8%A7%92%E8%89%B2%E5%8A%A8%E4%BD%9C%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E7%9A%84%E8%AE%BE%E8%AE%A1.html</link>
		<comments>http://www.5bay.cn/game-development/%E8%A7%92%E8%89%B2%E5%8A%A8%E4%BD%9C%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E7%9A%84%E8%AE%BE%E8%AE%A1.html#comments</comments>
		<pubDate>Fri, 17 Oct 2008 16:58:14 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[游戏开发]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[接口]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[类]]></category>
		<category><![CDATA[节点]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[错误]]></category>
		<category><![CDATA[隐藏]]></category>

		<guid isPermaLink="false">?p=289</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/game-development/%E8%A7%92%E8%89%B2%E5%8A%A8%E4%BD%9C%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E7%9A%84%E8%AE%BE%E8%AE%A1.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>本质上，图象 engine 是一帧帧渲染角色精灵的。渲染这个操作必须被隐藏起来为应用层不可见。3d engine 有更高的表现力，比如可以做骨骼动画，以此做动作间融合。这些应该归到渲染层面做。绝大多数情况下，应用层不应该关心。以前，我们的引擎接口提供了方法设置角色当前应该播放的动画系列。其参数有播放指定次数还是循环播放。仔细考虑，其实不太合理。实际应用中，将角色动画播放指定次数完成后，引擎应该做什么？让精灵的画面停留在最后一帧吗？显然是不合理的。如果精灵全部是模拟的活物的话，正常状态下它们永远都应该在运动。接口设计的健壮性应在于，我们无论怎样调用，都不应出现错误的状态。角色的画面静止就是这样一种错误状态。我曾经想实现一个很复杂的动画序列驱动引擎，相信很多人也干过。就是在引擎中支持播放一个列表的动画序列，并可以为每个节点附加控制器，决定是反复播放还是单次播放。并让控制器可以控制角色的内部属性。甚至这个播放列表还可以是树状结构。这个想法大约在 01 年的时候我曾经实现出来，发现并不好用。它完全违背了 KISS 原则。越是将功能做的全面，就越难二次扩展。用它的程序员也很难控制内部细节。（btw, 我在去年初放弃 boost jam 而换用 gmake 做 build tool 也是因为类似的理由）如果真正的考虑，其实我们所有需要控制的角色动画其实都可以分解成这样一种元动画：即一组循环动画前置一个进入这个动画的引导动画序列。比如坐下，就是从直立状态经历一个坐下的过程，最终让角色一直持续在坐着的状态。又比如人物站立时，做一些花哨的手势，也应在完成之后，又恢复成普通的站立形态。至于前导动画系列怎么和之前的角色状态衔接，我们可以交给引擎的底层考虑。而一切复杂动作皆可被如上分解。及时有一些特例，也可以做一些变通。比如最终的循环播放阶段可以只有一帧，那么角色就静止在那里了。如此设计，我们并不需要让引擎提供接口去控制一组动画需要播放一次还是多次，或是不停播放下去。对一个动画元组永远都只有一个播放指令。那么，交互式的动画如何控制？这需要增加一个调用参数。虽然，一组动画总可以无限播放，但引导这段动画的前序动作却只有一次。使用回调函数的设计是很难看的。比较漂亮的方法是可以指定前序动作的时间长度。因为这个时间往往跟逻辑紧密相关，比如挥刀劈砍，完成整个动作的时间需要程序控制精准，而不能由着美术人员制作。许多动作的播放时间长度都会随着游戏开发不断调整，我们不可能每次调整都去要求美术人员改变。所以引擎应该内部支持动画序列的播放时长，按程序运行时参数要求拉伸或压缩。对于循环播放的动画有时也有必要精确控制每个循环的时长。最典型的例子是跑步动画。当我们设定为角色一秒跑动两步跨过 10 米时，就需要精确控制 0.5 秒播放一个跑步循环。这样的控制可以避免视觉上感觉角色在虚拟世界的地面上滑动。总的来说，游戏逻辑应该和画面脱离。时间控制是放在逻辑上的，而画面表现则配合逻辑实现。 相关博文2008年10月17日 -- 随机数有多随机？ (0)2008年10月17日 -- 游戏数值公式的表象与本质 (0)2010年07月26日 -- AJAX的各种控件和类库 (0)2010年05月23日 -- Rsync详解 (0)2010年05月23日 -- mysql优化及全文搜索 (0)2008年10月17日 -- 思维的惯性 (0)2008年10月17日 -- 游戏的帧率控制 (0)2010年07月26日 -- PHP安全之数据过滤 (0)2008年10月17日 -- 用四叉树管理散布在平面上的对象 (0)2008年10月17日 -- 以人为本，美术资源的归档 (0)2008年10月17日 -- 游戏中的货币 [...]]]></description>
			<content:encoded><![CDATA[<p>本质上，图象 engine 是一帧帧渲染角色精灵的。渲染这个操作必须被隐藏起来为应用层不可见。3d engine 有更高的表现力，比如可以做骨骼动画，以此做动作间融合。这些应该归到渲染层面做。绝大多数情况下，应用层不应该关心。<br/><br/>以前，我们的引擎接口提供了方法设置角色当前应该播放的动画系列。其参数有播放指定次数还是循环播放。仔细考虑，其实不太合理。<span id="more-289"></span><br/><br/>实际应用中，将角色动画播放指定次数完成后，引擎应该做什么？让精灵的画面停留在最后一帧吗？显然是不合理的。如果精灵全部是模拟的活物的话，正常状态下它们永远都应该在运动。<br/><br/>接口设计的健壮性应在于，我们无论怎样调用，都不应出现错误的状态。角色的画面静止就是这样一种错误状态。<br/><br/>我曾经想实现一个很复杂的动画序列驱动引擎，相信很多人也干过。就是在引擎中支持播放一个列表的动画序列，并可以为每个节点附加控制器，决定是反复播放还是单次播放。并让控制器可以控制角色的内部属性。甚至这个播放列表还可以是树状结构。<br/><br/>这个想法大约在 01 年的时候我曾经实现出来，发现并不好用。它完全违背了 KISS 原则。越是将功能做的全面，就越难二次扩展。用它的程序员也很难控制内部细节。（btw, 我在去年初放弃 boost jam 而换用 gmake 做 build tool 也是因为类似的理由）<br/><br/>如果真正的考虑，其实我们所有需要控制的角色动画其实都可以分解成这样一种元动画：即一组循环动画前置一个进入这个动画的引导动画序列。比如坐下，就是从直立状态经历一个坐下的过程，最终让角色一直持续在坐着的状态。又比如人物站立时，做一些花哨的手势，也应在完成之后，又恢复成普通的站立形态。<br/><br/>至于前导动画系列怎么和之前的角色状态衔接，我们可以交给引擎的底层考虑。而一切复杂动作皆可被如上分解。及时有一些特例，也可以做一些变通。比如最终的循环播放阶段可以只有一帧，那么角色就静止在那里了。<br/><br/>如此设计，我们并不需要让引擎提供接口去控制一组动画需要播放一次还是多次，或是不停播放下去。对一个动画元组永远都只有一个播放指令。<br/><br/>那么，交互式的动画如何控制？<br/><br/>这需要增加一个调用参数。虽然，一组动画总可以无限播放，但引导这段动画的前序动作却只有一次。使用回调函数的设计是很难看的。比较漂亮的方法是可以指定前序动作的时间长度。因为这个时间往往跟逻辑紧密相关，比如挥刀劈砍，完成整个动作的时间需要程序控制精准，而不能由着美术人员制作。许多动作的播放时间长度都会随着游戏开发不断调整，我们不可能每次调整都去要求美术人员改变。所以引擎应该内部支持动画序列的播放时长，按程序运行时参数要求拉伸或压缩。<br/><br/>对于循环播放的动画有时也有必要精确控制每个循环的时长。最典型的例子是跑步动画。当我们设定为角色一秒跑动两步跨过 10 米时，就需要精确控制 0.5 秒播放一个跑步循环。这样的控制可以避免视觉上感觉角色在虚拟世界的地面上滑动。<br/><br/>总的来说，游戏逻辑应该和画面脱离。时间控制是放在逻辑上的，而画面表现则配合逻辑实现。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html" title="游戏数值公式的表象与本质">游戏数值公式的表象与本质</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%80%9D%E7%BB%B4%E7%9A%84%E6%83%AF%E6%80%A7.html" title="思维的惯性">思维的惯性</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E7%9A%84%E5%B8%A7%E7%8E%87%E6%8E%A7%E5%88%B6.html" title="游戏的帧率控制">游戏的帧率控制</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E7%94%A8%E5%9B%9B%E5%8F%89%E6%A0%91%E7%AE%A1%E7%90%86%E6%95%A3%E5%B8%83%E5%9C%A8%E5%B9%B3%E9%9D%A2%E4%B8%8A%E7%9A%84%E5%AF%B9%E8%B1%A1.html" title="用四叉树管理散布在平面上的对象">用四叉树管理散布在平面上的对象</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E4%BB%A5%E4%BA%BA%E4%B8%BA%E6%9C%AC%EF%BC%8C%E7%BE%8E%E6%9C%AF%E8%B5%84%E6%BA%90%E7%9A%84%E5%BD%92%E6%A1%A3.html" title="以人为本，美术资源的归档">以人为本，美术资源的归档</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E4%B8%AD%E7%9A%84%E8%B4%A7%E5%B8%81.html" title="游戏中的货币">游戏中的货币</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeaoe.html" title="AJAX应用程序开发七宗罪">AJAX应用程序开发七宗罪</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E5%87%BD%E6%95%B0" title="函数" rel="tag">函数</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E6%8E%A5%E5%8F%A3" title="接口" rel="tag">接口</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B8%B8%E6%88%8F" title="游戏" rel="tag">游戏</a>, <a href="http://www.5bay.cn/category/game-development" title="游戏开发" rel="tag">游戏开发</a>, <a href="http://www.5bay.cn/tag/%E7%A8%8B%E5%BA%8F" title="程序" rel="tag">程序</a>, <a href="http://www.5bay.cn/tag/%E7%B1%BB" title="类" rel="tag">类</a>, <a href="http://www.5bay.cn/tag/%E8%8A%82%E7%82%B9" title="节点" rel="tag">节点</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8" title="表" rel="tag">表</a>, <a href="http://www.5bay.cn/tag/%E8%AE%BE%E8%AE%A1" title="设计" rel="tag">设计</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a>, <a href="http://www.5bay.cn/tag/%E9%9A%90%E8%97%8F" title="隐藏" rel="tag">隐藏</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/game-development/%E8%A7%92%E8%89%B2%E5%8A%A8%E4%BD%9C%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E7%9A%84%E8%AE%BE%E8%AE%A1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>游戏数值公式的表象与本质</title>
		<link>http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html</link>
		<comments>http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html#comments</comments>
		<pubDate>Fri, 17 Oct 2008 16:49:23 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[游戏开发]]></category>
		<category><![CDATA[人]]></category>
		<category><![CDATA[函数]]></category>
		<category><![CDATA[判断]]></category>
		<category><![CDATA[属性]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[方法]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[系统]]></category>
		<category><![CDATA[表]]></category>
		<category><![CDATA[设计]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[错误]]></category>

		<guid isPermaLink="false">?p=285</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>拿魔兽世界（后面全简写作 wow ）举例说事，恐怕是唯一不容易遭人非议的了。我们注意到， wow 之前有很多网络游戏，甚至暴雪之前也有一款很接近现代网游的游戏—— diablo 的 battle net 版，都采用了一种让玩家展现个性化角色的设计。那就是随着升级，为角色自由分配属性点，再由属性点影响角色的能力。我可以举出长长的例子证明这一点，甚至电脑 RPG 的鼻祖，D&#038;D ，也是有自由加点的设定的。虽然 D&#038;D 里玩家可以加的点很少，暴雪在 diablo 里加强了这个设计。为什么在这么多已有的网游中，大家都沿袭了这个设定，把它作为提供玩家个性化的必要手段时，暴雪绝然抛弃了它，把个性化转移到了天赋系统中。是为了创新吗？我不是暴雪的游戏设计师，我没有答案。但我们知道，暴雪从来不是一个以创新为名的游戏制作公司。而天赋树从外观上看，就是 diablo 中技能树的延续。熟悉 wow 的玩家可能会说，是为了平衡。没错，但这是表象。我们需要进一步看清本质。前段试玩了一个新出的网游，工作需要。可能是我已经厌倦了 wow ，对 wow like 的东西更提不起精神来。我试图说服自己，我觉得这个游戏比 wow 还无趣，是因为早先年打 wow 打累了。一丁点不如 wow 的地方都会被放大来看，甚至比 wow 做的好的，也会被忽略掉。在公式化的游戏进程里，我玩到了游戏设计者“体贴”玩家的地方，比如升级飞快，轻松的接交任务等等。但是让我能理解，又觉得不可理喻的地方是，游戏依然保留着“传统”MMORPG 的设定，那就是每次升级都可以自由分配属性点。亲身体验后，更加坚定了我的想法：自由分配属性点在大多数游戏中是一个极其鸡肋的设定。或许是大部分游戏设计师认为，我们要提供给玩家一些自由度，而用户接受了自由加点这个设定，那么这就是一个廉价稳定的方案，我们也要提供它，没什么坏处，不是吗？其实，大多数用户根本不知道他们真的需要什么，只是服务提供商对他们反复强化一些东西，这些东西反过来才成了必须品。在软件行业中，这样的例子比比皆是。“不要听用户的”是我去年听到的深合我意的一个声音。当然，千万不要曲解这句话。我从来没有否认过，用户调查，市场分析，等等这些对于游戏开发的重要性。作为游戏设计人，我们到底想提供给用户多少自由度，怎样的自由度，这些都必须在设计时考虑在内。我们不是神，可以创造出简洁的自然法则构建出如此复杂的世界，任其发展。而且上百亿年了，其中的智能生物都无法完全了解这些规则。说回属性点自由分配的设计，看似自由，比如一个小角色从1 级到满级可能得到上十点甚至上百点自由分配组合在 4 到 6 个不同的属性上。实际上，真正有用的组合方式寥寥无几。有天真的设计师，指望玩家可以摸索出超出自己想象的自由属性点组合方案吗？如果真的出现了，那么对游戏平衡一定是一个灾难。如果你有信心对你没有预料到的东西做出合理的判断（不至于引起灾难），那么只有一种可能，那就是你做出了数值背后更深层次的规律的探索。可惜，大部分设计师没有这么做。总结一下。如果你给了玩家一些自由度，让他们自由组合一些东西，达到个性化的目的，那么在设计阶段，作为设计师的你，就一定要全面列出所有的组合可能，并一一对其审视。几十上百个的属性点自由分配的组合方案，从绝对数字上说实在是太大了。没有人会一一排到纸上演算。实际上也没有这个必要，因为大多数组合间是有规律的，不至于把量变堆积为质变。大量的组合方案在对玩家来说都是无意义的，没有人会那么组合，除非他犯错误，否则一定能找到一个达到他期望目的（PvP PvE 或者别的目的）的更优解。从我信奉的 KISS 哲学上看，允许这么多理论上的属性点组合方案本身就是一个错误。如果我们希望玩家有 10 种个性化方案，就应该用最少的元素提供出 10 种这个数量级的变化规则。而不是提供上千种，让玩家从中选出 10 种。网络游戏中，提供自由度而存在的规则和设定不是为了考验玩家的智力（有时连智力都不需要，只需要机械性的忍受力）而存在的。我相信很多人在接触一款新游戏时，都有过和我一样的迷茫：不知道升级后点该怎么加，只是无谓的犹豫不决，或是干脆一古脑把点全加在最需要的方面（比如物理攻击职业把点全堆在力量上）。再来看看，大家沿袭最多的 MMO 系统，还是暴雪的——装备系统。很多玩家迷恋于装备上 +20 力量，+10 敏捷这些属性点加成。我想大家在开发网游的时候，也自然而然的把这个系统做进产品里去了吧。提一个问题：为了暴雪在做的时候，不把 [...]]]></description>
			<content:encoded><![CDATA[<p>拿魔兽世界（后面全简写作 wow ）举例说事，恐怕是唯一不容易遭人非议的了。我们注意到， wow 之前有很多网络游戏，甚至暴雪之前也有一款很接近现代网游的游戏—— diablo 的 battle net 版，都采用了一种让玩家展现个性化角色的设计。那就是随着升级，为角色自由分配属性点，再由属性点影响角色的能力。<br/><br/>我可以举出长长的例子证明这一点，甚至电脑 RPG 的鼻祖，D&#038;D ，也是有自由加点的设定的。虽然 D&#038;D 里玩家可以加的点很少，暴雪在 diablo 里加强了这个设计。<br/><br/>为什么在这么多已有的网游中，大家都沿袭了这个设定，把它作为提供玩家个性化的必要手段时，暴雪绝然抛弃了它，把个性化转移到了天赋系统中。是为了创新吗？我不是暴雪的游戏设计师，我没有答案。但我们知道，暴雪从来不是一个以创新为名的游戏制作公司。而天赋树从外观上看，就是 diablo 中技能树的延续。<span id="more-285"></span><br/><br/>熟悉 wow 的玩家可能会说，是为了平衡。没错，但这是表象。我们需要进一步看清本质。<br/><br/>前段试玩了一个新出的网游，工作需要。可能是我已经厌倦了 wow ，对 wow like 的东西更提不起精神来。我试图说服自己，我觉得这个游戏比 wow 还无趣，是因为早先年打 wow 打累了。一丁点不如 wow 的地方都会被放大来看，甚至比 wow 做的好的，也会被忽略掉。<br/><br/>在公式化的游戏进程里，我玩到了游戏设计者“体贴”玩家的地方，比如升级飞快，轻松的接交任务等等。但是让我能理解，又觉得不可理喻的地方是，游戏依然保留着“传统”MMORPG 的设定，那就是每次升级都可以自由分配属性点。<br/><br/>亲身体验后，更加坚定了我的想法：自由分配属性点在大多数游戏中是一个极其鸡肋的设定。<br/><br/>或许是大部分游戏设计师认为，我们要提供给玩家一些自由度，而用户接受了自由加点这个设定，那么这就是一个廉价稳定的方案，我们也要提供它，没什么坏处，不是吗？<br/><br/>其实，大多数用户根本不知道他们真的需要什么，只是服务提供商对他们反复强化一些东西，这些东西反过来才成了必须品。在软件行业中，这样的例子比比皆是。“不要听用户的”是我去年听到的深合我意的一个声音。当然，千万不要曲解这句话。我从来没有否认过，用户调查，市场分析，等等这些对于游戏开发的重要性。<br/><br/>作为游戏设计人，我们到底想提供给用户多少自由度，怎样的自由度，这些都必须在设计时考虑在内。我们不是神，可以创造出简洁的自然法则构建出如此复杂的世界，任其发展。而且上百亿年了，其中的智能生物都无法完全了解这些规则。<br/><br/>说回属性点自由分配的设计，看似自由，比如一个小角色从1 级到满级可能得到上十点甚至上百点自由分配组合在 4 到 6 个不同的属性上。实际上，真正有用的组合方式寥寥无几。有天真的设计师，指望玩家可以摸索出超出自己想象的自由属性点组合方案吗？如果真的出现了，那么对游戏平衡一定是一个灾难。<br/><br/>如果你有信心对你没有预料到的东西做出合理的判断（不至于引起灾难），那么只有一种可能，那就是你做出了数值背后更深层次的规律的探索。可惜，大部分设计师没有这么做。<br/><br/>总结一下。如果你给了玩家一些自由度，让他们自由组合一些东西，达到个性化的目的，那么在设计阶段，作为设计师的你，就一定要全面列出所有的组合可能，并一一对其审视。<br/><br/>几十上百个的属性点自由分配的组合方案，从绝对数字上说实在是太大了。没有人会一一排到纸上演算。实际上也没有这个必要，因为大多数组合间是有规律的，不至于把量变堆积为质变。大量的组合方案在对玩家来说都是无意义的，没有人会那么组合，除非他犯错误，否则一定能找到一个达到他期望目的（PvP PvE 或者别的目的）的更优解。<br/><br/>从我信奉的 KISS 哲学上看，允许这么多理论上的属性点组合方案本身就是一个错误。如果我们希望玩家有 10 种个性化方案，就应该用最少的元素提供出 10 种这个数量级的变化规则。而不是提供上千种，让玩家从中选出 10 种。网络游戏中，提供自由度而存在的规则和设定不是为了考验玩家的智力（有时连智力都不需要，只需要机械性的忍受力）而存在的。<br/><br/>我相信很多人在接触一款新游戏时，都有过和我一样的迷茫：不知道升级后点该怎么加，只是无谓的犹豫不决，或是干脆一古脑把点全加在最需要的方面（比如物理攻击职业把点全堆在力量上）。<br/><br/>再来看看，大家沿袭最多的 MMO <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" class="st_tag internal_tag" rel="tag" title="标签 系统 下的日志">系统</a>，还是暴雪的——装备系统。很多玩家迷恋于装备上 +20 力量，+10 敏捷这些属性点加成。<br/><br/>我想大家在开发网游的时候，也自然而然的把这个系统做进产品里去了吧。<br/><br/>提一个问题：为了暴雪在做的时候，不把 +20 点力量直接写成 + XXX 点伤害力呢？这样玩家不就可以直接知道这个东西对他有什么好处了。<br/><br/>在 diablo 的年代，属性点意味着高级技能学习的先决条件；而 wow 中，同样的属性点，对于不同职业的实际效果反应是不一样的。比如敏捷可以增加盗贼的攻击力，而对战士则没有这样的效果。即使是同样依赖力量增加战斗力的职业，一点力量意味的伤害力的增强也是不同的。<br/><br/>所以，本质上，wow 中属性点到实际伤害计算公式中参量的变换，是为同一装备对不同职业的效能差异服务的。如果 wow 中，每个职业都用他们各自专有的装备，互不影响，那么，属性点的设计就是多余的。至少没有必要展现给玩家看，只让它作为设计战斗公式时的辅助工具就够了。<br/><br/>几年前，我曾经跟一个同事争论过一些游戏数值设定的方法。我坚持认为，一切都是数学公式，我们在设计时完全可以用 A B C D E 代替我们想要的东西，甚至一些公式也不用先定好具体函数是什么，而只需要根据最终的需要反过来推导。反正最终都是一些初等函数的变换，不可能跳出大框价。<br/><br/>但是很多设计师总期望先从现实中或是小说设定中找到对应物，非搞清楚为什么力量影响攻击力，根骨导致 HP 总量更长。那些名词到底是什么更为重要。以此可以展开更多的想象。<br/><br/>我说的名词还包括，“法师”、“战士”、“盗贼”、“牧师”这些……<br/><br/>最近我自己在做数值设定了，亲身感受后，果然合适的名词的确能辅助设计。没错，我们总需要借助一些更有意义的词来在头脑中建立起概念。但是，最终我也发现，一旦能克服对这些名词的依赖，纯数学的构建出基本的关系，无偏袒的，只为了数字上的平衡和变化去设计整体的框架。后期再根据需要找到合适的词并套入系统，以此展开细节上的联想，效果可能更好。更能帮助我们跳出玩过的前人的总总游戏的框架，找到新的东西。</p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%9C%89%E5%A4%9A%E9%9A%8F%E6%9C%BA%EF%BC%9F.html" title="随机数有多随机？">随机数有多随机？</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E7%9A%84%E5%B8%A7%E7%8E%87%E6%8E%A7%E5%88%B6.html" title="游戏的帧率控制">游戏的帧率控制</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E8%A7%92%E8%89%B2%E5%8A%A8%E4%BD%9C%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E7%9A%84%E8%AE%BE%E8%AE%A1.html" title="角色动作控制接口的设计">角色动作控制接口的设计</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/phpeezhanchang.html" title="PHP安全之数据过滤">PHP安全之数据过滤</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html" title="服务器消息的广播">服务器消息的广播</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F%E4%B8%AD%E7%9A%84%E8%B4%A7%E5%B8%81%E7%B3%BB%E7%BB%9F.html" title="网络游戏中的货币系统">网络游戏中的货币系统</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E4%B8%AD%E7%9A%84%E8%B4%A7%E5%B8%81.html" title="游戏中的货币">游戏中的货币</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E8%B0%83%E6%95%B4%7E.html" title="游戏数值调整~">游戏数值调整~</a> (0)</li><li>2011年06月29日 -- <a href="http://www.5bay.cn/game-development/zishenshejishitonyventricejiexishoujiyouxikaifadesigecengci.html" title="资深设计师Tony Ventrice解析手机游戏开发的四个层次">资深设计师Tony Ventrice解析手机游戏开发的四个层次</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/peeeeee.html" title="深入探讨PHP中的内存管理问题">深入探讨PHP中的内存管理问题</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/network-programming/phpzhongdememcachehanshukumemcachefunctions.html" title="PHP中的Memcache函数库（Memcache Functions）">PHP中的Memcache函数库（Memcache Functions）</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E7%BD%91%E7%BB%9C%E6%B8%B8%E6%88%8F%E7%9A%84%E5%AF%B9%E6%97%B6%E4%BB%A5%E5%8F%8A%E5%90%8C%E6%AD%A5%E9%97%AE%E9%A2%98.html" title="网络游戏的对时以及同步问题">网络游戏的对时以及同步问题</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%EF%BC%8C%E4%B8%80%E7%A7%8D%E5%A5%87%E6%80%AA%E7%9A%84%E8%BD%AF%E4%BB%B6.html" title="游戏，一种奇怪的软件">游戏，一种奇怪的软件</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/tag/%E4%BA%BA" title="人" rel="tag">人</a>, <a href="http://www.5bay.cn/tag/%E5%87%BD%E6%95%B0" title="函数" rel="tag">函数</a>, <a href="http://www.5bay.cn/tag/%E5%88%A4%E6%96%AD" title="判断" rel="tag">判断</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a>, <a href="http://www.5bay.cn/tag/%E5%B7%A5%E5%85%B7" title="工具" rel="tag">工具</a>, <a href="http://www.5bay.cn/tag/%E6%96%B9%E6%B3%95" title="方法" rel="tag">方法</a>, <a href="http://www.5bay.cn/tag/%E6%B8%B8%E6%88%8F" title="游戏" rel="tag">游戏</a>, <a href="http://www.5bay.cn/category/game-development" title="游戏开发" rel="tag">游戏开发</a>, <a href="http://www.5bay.cn/tag/%E7%B3%BB%E7%BB%9F" title="系统" rel="tag">系统</a>, <a href="http://www.5bay.cn/tag/%E8%A1%A8" title="表" rel="tag">表</a>, <a href="http://www.5bay.cn/tag/%E8%AE%BE%E8%AE%A1" title="设计" rel="tag">设计</a>, <a href="http://www.5bay.cn/tag/%E8%BD%AF%E4%BB%B6" title="软件" rel="tag">软件</a>, <a href="http://www.5bay.cn/tag/%E9%94%99%E8%AF%AF" title="错误" rel="tag">错误</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用getElementsByTagName和getAttribute获取对象集合中属性值的例子</title>
		<link>http://www.5bay.cn/network-programming/dhtml-css/%E7%94%A8getelementsbytagname%E5%92%8Cgetattribute%E8%8E%B7%E5%8F%96%E5%AF%B9%E8%B1%A1%E9%9B%86%E5%90%88%E4%B8%AD%E5%B1%9E%E6%80%A7%E5%80%BC%E7%9A%84%E4%BE%8B%E5%AD%90.html</link>
		<comments>http://www.5bay.cn/network-programming/dhtml-css/%E7%94%A8getelementsbytagname%E5%92%8Cgetattribute%E8%8E%B7%E5%8F%96%E5%AF%B9%E8%B1%A1%E9%9B%86%E5%90%88%E4%B8%AD%E5%B1%9E%E6%80%A7%E5%80%BC%E7%9A%84%E4%BE%8B%E5%AD%90.html#comments</comments>
		<pubDate>Thu, 16 Aug 2007 21:06:38 +0000</pubDate>
		<dc:creator>江小邪</dc:creator>
				<category><![CDATA[DHTML&CSS]]></category>
		<category><![CDATA[getattribute]]></category>
		<category><![CDATA[getelementsbytagname]]></category>
		<category><![CDATA[对象集合]]></category>
		<category><![CDATA[属性]]></category>

		<guid isPermaLink="false">?p=259</guid>
		<description><![CDATA[<a href="http://www.5bay.cn/network-programming/dhtml-css/%E7%94%A8getelementsbytagname%E5%92%8Cgetattribute%E8%8E%B7%E5%8F%96%E5%AF%B9%E8%B1%A1%E9%9B%86%E5%90%88%E4%B8%AD%E5%B1%9E%E6%80%A7%E5%80%BC%E7%9A%84%E4%BE%8B%E5%AD%90.html"><img align="left" hspace="5" width="150" height="150" src="http://www.5bay.cn/wp-content/plugins/thumbnail-for-excerpts/tfe_no_thumb.png" class="alignleft wp-post-image tfe" alt="" title="" /></a>&#60;html&#62;&#60;head&#62;&#60;title&#62;test&#60;/title&#62;&#60;script language=&#34;JavaScript&#34; type=&#34;text/javascript&#34;&#62;function tn(id,tag,at){var idx=document.getElementById(id);if(idx){ &#160; &#160; &#160; &#160;var idd=idx.getElementsByTagName(tag); &#160; &#160; &#160; &#160;alert(idd.length); &#160; &#160; &#160; &#160;for (i=0;i&#60;=idd.length-1;i++) &#160; &#160; &#160; &#160;{ &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;eval(&#34;alert(&#92;&#34;this is &#34;+i+&#34;s &#34;+tag+&#34;.&#34;+at+&#34;=&#34;+idd.getAttribute(at)+&#34;&#92;&#34;);&#34;); &#160; &#160; &#160; &#160;}}}&#60;/script&#62;&#60;/head&#62;&#60;body bgcolor=&#34;#FFFFFF&#34; text=&#34;#000010&#34; link=&#34;#0000C0&#34; vlink=&#34;#000040&#34; alink=&#34;#000040&#34;&#62;loading&#8230;&#60;br&#62;&#60;div id=&#34;divtable&#34;&#62; &#160;&#60;div id=&#34;diva&#34;&#62;&#60;a href=&#34;fdsa#1&#34;&#62;此处显示 &#160;id &#34;diva&#34; 的内容&#60;/a&#62; &#160;&#60;a href=&#34;43242#2&#34;&#62;此处显示 &#160;id &#34;diva&#34; 的内容&#60;/a&#62; [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-259"></span><br/>&lt;<a href="http://www.5bay.cn/tag/html" class="st_tag internal_tag" rel="tag" title="标签 html 下的日志">html</a>&gt;<br/>&lt;head&gt;<br/>&lt;title&gt;test&lt;/title&gt;<br/>&lt;script language=&quot;<a href="http://www.5bay.cn/tag/javascript" class="st_tag internal_tag" rel="tag" title="标签 javascript 下的日志">JavaScript</a>&quot; type=&quot;text/<a href="http://www.5bay.cn/tag/javascript" class="st_tag internal_tag" rel="tag" title="标签 javascript 下的日志">javascript</a>&quot;&gt;<br/>function tn(id,tag,at){<br/>var idx=document.getElementById(id);<br/>if(idx){<br/> &nbsp; &nbsp; &nbsp; &nbsp;var idd=idx.<a href="http://www.5bay.cn/tag/getelementsbytagname" class="st_tag internal_tag" rel="tag" title="标签 getelementsbytagname 下的日志">getElementsByTagName</a>(tag);<br/> &nbsp; &nbsp; &nbsp; &nbsp;alert(idd.length);<br/> &nbsp; &nbsp; &nbsp; &nbsp;for (i=0;i&lt;=idd.length-1;i++)<br/> &nbsp; &nbsp; &nbsp; &nbsp;{<br/> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;eval(&quot;alert(&#92;&quot;this is &quot;+i+&quot;s &quot;+tag+&quot;.&quot;+at+&quot;=&quot;+idd<i>.<a href="http://www.5bay.cn/tag/getattribute" class="st_tag internal_tag" rel="tag" title="标签 getattribute 下的日志">getAttribute</a>(at)+&quot;&#92;&quot;);&quot;);<br/> &nbsp; &nbsp; &nbsp; &nbsp;}<br/>}<br/>}<br/>&lt;/script&gt;<br/>&lt;/head&gt;<br/>&lt;body bgcolor=&quot;#FFFFFF&quot; text=&quot;#000010&quot; link=&quot;#0000C0&quot; vlink=&quot;#000040&quot; alink=&quot;#000040&quot;&gt;<br/>loading&#8230;<br/>&lt;br&gt;<br/>&lt;<a href="http://www.5bay.cn/tag/div" class="st_tag internal_tag" rel="tag" title="标签 div 下的日志">div</a> id=&quot;divtable&quot;&gt;<br/> &nbsp;&lt;div id=&quot;diva&quot;&gt;&lt;a href=&quot;fdsa#1&quot;&gt;此处显示 &nbsp;id &quot;diva&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;43242#2&quot;&gt;此处显示 &nbsp;id &quot;diva&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;432#3&quot;&gt;此处显示 &nbsp;id &quot;diva&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;/div&gt;<br/> &nbsp; &lt;div id=&quot;divb&quot;&gt;&lt;a href=&quot;fdsa#1&quot;&gt;此处显示 &nbsp;id &quot;divb&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;34#2&quot;&gt;此处显示 &nbsp;id &quot;divb&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;ewr#3&quot;&gt;此处显示 &nbsp;id &quot;divb&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;/div&gt;<br/> &nbsp;&lt;div id=&quot;divc&quot;&gt;&lt;a href=&quot;fdafd#1&quot;&gt;此处显示 &nbsp;id &quot;divb&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;fda#2&quot;&gt;此处显示 &nbsp;id &quot;divb&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;fdsaf#3&quot;&gt;此处显示 &nbsp;id &quot;divb&quot; 的内容&lt;/a&gt;<br/> &nbsp;&lt;/div&gt;<br/> &nbsp;&lt;div id=&quot;dive&quot;&gt;&lt;a href=&quot;javascript:tn(&#039;diva&#039;,&#039;a&#039;,&#039;href&#039;);;&quot; onClick=&quot;&quot;&gt;diva&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;#2&quot; onClick=&quot;tn(this.innerText,&#039;a&#039;,&#039;href&#039;);&quot;&gt;divb&lt;/a&gt;<br/> &nbsp;&lt;a href=&quot;#3&quot; onClick=&quot;tn(this.innerText,&#039;a&#039;,&#039;href&#039;);&quot;&gt;divc&lt;/a&gt;<br/> &nbsp; &lt;a href=&quot;javascript:tn(&#039;divtable&#039;,&#039;div&#039;,&#039;id&#039;);&quot; &gt;divc&lt;/a&gt;<br/> &nbsp;&lt;/div&gt;<br/>&lt;/div&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/></p>
<h2  class="related_post_title">相关博文</h2><ul class="related_post"><li>2011年06月29日 -- <a href="http://www.5bay.cn/android%e7%ac%94%e8%ae%b0/androidzaixiankaifagongjuappinventor.html" title="Android在线开发工具 App Inventor">Android在线开发工具 App Inventor</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeprn-asp-jpg.html" title="如何删除删不掉的”PRN.asp:.jpg”">如何删除删不掉的”PRN.asp:.jpg”</a> (0)</li><li>2010年07月28日 -- <a href="http://www.5bay.cn/server-building/eeeeeeee-2.html" title="防止网卡被禁用的具体配置方法">防止网卡被禁用的具体配置方法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeee.html" title="Ajax的工作原理">Ajax的工作原理</a> (1)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajax.html" title="AJAX的各种控件和类库">AJAX的各种控件和类库</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/innerhtmleenertexteeterhtmlqia.html" title="innerHTML、innerText和outerHTML的用法">innerHTML、innerText和outerHTML的用法</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/xmlhttpe.html" title="XMLHTTP对象封装技术">XMLHTTP对象封装技术</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/ajaxeeeeseeao.html" title="ajax基础知识:js事件触发大全">ajax基础知识:js事件触发大全</a> (0)</li><li>2010年07月26日 -- <a href="http://www.5bay.cn/network-programming/eesoneeajaxeehuai.html" title="基于JSON的高级AJAX开发技术">基于JSON的高级AJAX开发技术</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/rsyncxiangjie.html" title="Rsync详解">Rsync详解</a> (0)</li><li>2010年05月23日 -- <a href="http://www.5bay.cn/server-building/mysqlyouhuajiquanwensousuo.html" title="mysql优化及全文搜索">mysql优化及全文搜索</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B6%88%E6%81%AF%E7%9A%84%E5%B9%BF%E6%92%AD.html" title="服务器消息的广播">服务器消息的广播</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E8%A7%92%E8%89%B2%E5%8A%A8%E4%BD%9C%E6%8E%A7%E5%88%B6%E6%8E%A5%E5%8F%A3%E7%9A%84%E8%AE%BE%E8%AE%A1.html" title="角色动作控制接口的设计">角色动作控制接口的设计</a> (0)</li><li>2008年10月17日 -- <a href="http://www.5bay.cn/game-development/%E6%B8%B8%E6%88%8F%E6%95%B0%E5%80%BC%E5%85%AC%E5%BC%8F%E7%9A%84%E8%A1%A8%E8%B1%A1%E4%B8%8E%E6%9C%AC%E8%B4%A8.html" title="游戏数值公式的表象与本质">游戏数值公式的表象与本质</a> (0)</li></ul>
	标签Tags：<a href="http://www.5bay.cn/category/network-programming/dhtml-css" title="DHTML&amp;CSS" rel="tag">DHTML&amp;CSS</a>, <a href="http://www.5bay.cn/tag/getattribute" title="getattribute" rel="tag">getattribute</a>, <a href="http://www.5bay.cn/tag/getelementsbytagname" title="getelementsbytagname" rel="tag">getelementsbytagname</a>, <a href="http://www.5bay.cn/tag/%E5%AF%B9%E8%B1%A1%E9%9B%86%E5%90%88" title="对象集合" rel="tag">对象集合</a>, <a href="http://www.5bay.cn/tag/%E5%B1%9E%E6%80%A7" title="属性" rel="tag">属性</a><br />
]]></content:encoded>
			<wfw:commentRss>http://www.5bay.cn/network-programming/dhtml-css/%E7%94%A8getelementsbytagname%E5%92%8Cgetattribute%E8%8E%B7%E5%8F%96%E5%AF%B9%E8%B1%A1%E9%9B%86%E5%90%88%E4%B8%AD%E5%B1%9E%E6%80%A7%E5%80%BC%E7%9A%84%E4%BE%8B%E5%AD%90.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

