<?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>小糊涂的超级BLOG (Delphi Php Java C++ Object-C Python )</title>
	<atom:link href="http://blog.donews.com/cnsoft/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.donews.com/cnsoft</link>
	<description>Tags:服务器技术/BLOG应用发展/移动应用/游戏/Linux Manage/EBOOK下载/免费资源/IPHONE</description>
	<lastBuildDate>Fri, 10 Feb 2012 05:48:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Launcher下载卡在262.1KB,提示下载无响应 不能进游戏..</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/02/10/1582865.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/02/10/1582865.aspx#comments</comments>
		<pubDate>Fri, 10 Feb 2012 05:48:04 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>
		<category><![CDATA[Exchange /帮助别人解决的问题]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/02/10/1582865.aspx</guid>
		<description><![CDATA[坑爹的事常有, 暴雪也如此. 自从更新了4.3.2 好多损友都有面临此问题&#8230;
http://www.battlenet.com.cn/wow/zh/forum/topic/4771808879?page=5
我自己总结了一下,
其实只要launcher是亮的, 然后退出launcher 禁用本地连接, 点wow 一样的效果. 可以进.
每次起wow之前 都把连接禁用了 就能进了
launcher 是亮的 是前提..
]]></description>
			<content:encoded><![CDATA[<p>坑爹的事常有, 暴雪也如此. 自从更新了4.3.2 好多损友都有面临此问题&#8230;</p>
<p>http://www.battlenet.com.cn/wow/zh/forum/topic/4771808879?page=5</p>
<p>我自己总结了一下,<br />
其实只要launcher是亮的, 然后退出launcher 禁用本地连接, 点wow 一样的效果. 可以进.<br />
每次起wow之前 都把连接禁用了 就能进了</p>
<p>launcher 是亮的 是前提..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/02/10/1582865.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>会有这么一天,没有百度和google</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/01/31/1582856.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/01/31/1582856.aspx#comments</comments>
		<pubDate>Tue, 31 Jan 2012 08:23:41 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582856</guid>
		<description><![CDATA[如果baidu google 出来的内容仍然需要花上大把时间才能找到自己想要的答案, 那么可能就是到了人类信息处理的极限(产生的数据远远大于可以被感知的数量). 于是诸多的行业、职业间的鸿沟更加的巨大.要想找到点真的有用的东西,就必须要具备初步的专业(行业)知识. 否则面对搜索出来的千百条信息(冠冕堂皇的文字), 你说你相信还是不相信呢&#8230;  要知道&#8221;托&#8221;也不在少数. 慢慢的我发现这么多年来,唯有IT人遵循着知无不言,言无不尽的原则,在互联网上耕耘. 而很多传统行业或者说社会行业(指的是现实社会人) 只是索取,而无反哺。没有哪个人会去回答一些现实的问题, 比如it人士的户口 暂住证问题等等。 反而,你会发现很多与电脑有关的问题却可以寻找到答案.  没有人会透露事实公开却被人忽视的信息, 可能是诸多政府的制度限制. 但实际上,每个市民都有一样的权利.
剩下的就是一群水人,各种水. 构成了垃圾信息. 徒占带宽 徒耗资源。 终有一天, 低碳之风也需要刮到互联网络.  否则,迟早有一天, 会淹了我们.
鉴于此, 所有贡献有价值信息的人应该考虑一下:  信息也可以用来交换,而不是一味分享. 比如解决一些实际问题. 这其实也挺矛盾, 与互联网的共享精神背道而驰了, 但人貌似总归要在现实中生活的.  这也可以解释为什么不是所有人愿意去分享.没有回报嘛.   所以我想如果交换可以得以实施,反而是更加促进了信息的流动. 远比之前的方式要深入得多.
]]></description>
			<content:encoded><![CDATA[<p>如果baidu google 出来的内容仍然需要花上大把时间才能找到自己想要的答案, 那么可能就是到了人类信息处理的极限(产生的数据远远大于可以被感知的数量). 于是诸多的行业、职业间的鸿沟更加的巨大.要想找到点真的有用的东西,就必须要具备初步的专业(行业)知识. 否则面对搜索出来的千百条信息(冠冕堂皇的文字), 你说你相信还是不相信呢&#8230;  要知道&#8221;托&#8221;也不在少数. 慢慢的我发现这么多年来,唯有IT人遵循着知无不言,言无不尽的原则,在互联网上耕耘. 而很多传统行业或者说社会行业(指的是现实社会人) 只是索取,而无反哺。没有哪个人会去回答一些现实的问题, 比如it人士的户口 暂住证问题等等。 反而,你会发现很多与电脑有关的问题却可以寻找到答案.  没有人会透露事实公开却被人忽视的信息, 可能是诸多政府的制度限制. 但实际上,每个市民都有一样的权利.<br />
剩下的就是一群水人,各种水. 构成了垃圾信息. 徒占带宽 徒耗资源。 终有一天, 低碳之风也需要刮到互联网络.  否则,迟早有一天, 会淹了我们.</p>
<p>鉴于此, 所有贡献有价值信息的人应该考虑一下:  信息也可以用来交换,而不是一味分享. 比如解决一些实际问题. 这其实也挺矛盾, 与互联网的共享精神背道而驰了, 但人貌似总归要在现实中生活的.  这也可以解释为什么不是所有人愿意去分享.没有回报嘛.   所以我想如果交换可以得以实施,反而是更加促进了信息的流动. 远比之前的方式要深入得多.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/01/31/1582856.aspx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>树先生.</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/01/09/1582850.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/01/09/1582850.aspx#comments</comments>
		<pubDate>Mon, 09 Jan 2012 03:03:18 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[NoteBooks/ 朝花夕拾]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/01/09/1582850.aspx</guid>
		<description><![CDATA[这是个很隐晦的片子. 但个人感觉是很多寓意的. 不管是无心的还是有意的.
最触动我的是 树和梅子的文字表白. 有些超脱. &#8220;如果自己的命运要靠别人来决定,不是很悲哀吗?&#8221;  剧情很普通,但是会发生在每个人身上. 别人歌颂的 幸福家园 真的是自己的幸福吗?  树追求了自己的幸福. 后面的结局也是非飘逸,虽然有些荒唐,但这也是树实现幸福的方式. 所以他是树先生.
树欲静而风不止. 树先生在不经意间就被时间抛弃了. 他老了,还一无所有. 只有幻想中才看到 老婆和孩子.
]]></description>
			<content:encoded><![CDATA[<p>这是个很隐晦的片子. 但个人感觉是很多寓意的. 不管是无心的还是有意的.<br />
最触动我的是 树和梅子的文字表白. 有些超脱. &#8220;如果自己的命运要靠别人来决定,不是很悲哀吗?&#8221;  剧情很普通,但是会发生在每个人身上. 别人歌颂的 幸福家园 真的是自己的幸福吗?  树追求了自己的幸福. 后面的结局也是非飘逸,虽然有些荒唐,但这也是树实现幸福的方式. 所以他是树先生.<br />
树欲静而风不止. 树先生在不经意间就被时间抛弃了. 他老了,还一无所有. 只有幻想中才看到 老婆和孩子.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/01/09/1582850.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>祈求平安</title>
		<link>http://blog.donews.com/cnsoft/archive/2012/01/06/1582848.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2012/01/06/1582848.aspx#comments</comments>
		<pubDate>Fri, 06 Jan 2012 07:19:32 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2012/01/06/1582848.aspx</guid>
		<description><![CDATA[平安是福.祈祷一家人一辈子平平安安.
]]></description>
			<content:encoded><![CDATA[<p>平安是福.祈祷一家人一辈子平平安安.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2012/01/06/1582848.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>神骑世界全民测试开启.无限送新手卡大礼包.</title>
		<link>http://blog.donews.com/cnsoft/archive/2011/12/09/1582844.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2011/12/09/1582844.aspx#comments</comments>
		<pubDate>Fri, 09 Dec 2011 08:55:43 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2011/12/09/1582844.aspx</guid>
		<description><![CDATA[
http://www.sqsj.cn/act/
]]></description>
			<content:encoded><![CDATA[<p><a href="http://img.lygame.cn/sqsj/main/main_focus_03.jpg" rel="lightbox[1582844]"><img class="alignnone" src="http://img.lygame.cn/sqsj/main/main_focus_03.jpg" alt="" width="416" height="244" /></a></p>
<p><a href="http://www.sqsj.cn/act/">http://www.sqsj.cn/act/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2011/12/09/1582844.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大海航行安全指南</title>
		<link>http://blog.donews.com/cnsoft/archive/2011/12/07/1582839.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2011/12/07/1582839.aspx#comments</comments>
		<pubDate>Wed, 07 Dec 2011 03:34:23 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[NoteBooks/ 朝花夕拾]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582839</guid>
		<description><![CDATA[1. 开弓没有回头箭, 开弓以后该做的就是冲刺.
2. 做好一面盾牌, 用来抵挡流弹.
3. 也要做好上断头台的准备, 一旦不成功 你就是千古罪人. 革命嘛.
4. 如果你觉得危险,还是赶紧跳海吧.
5. 身为一个船长, 在上船之前要洞察人员是否完备, 以及此次航行的目标是否过大. 不能盲目乐观 , 而一旦变更发生时,要及时知会总部,而不能替别人买单.  殊不知, 你本将心向明月 奈何明月照沟渠.
]]></description>
			<content:encoded><![CDATA[<p>1. 开弓没有回头箭, 开弓以后该做的就是冲刺.</p>
<p>2. 做好一面盾牌, 用来抵挡流弹.</p>
<p>3. 也要做好上断头台的准备, 一旦不成功 你就是千古罪人. 革命嘛.</p>
<p>4. 如果你觉得危险,还是赶紧跳海吧.</p>
<p>5. 身为一个船长, 在上船之前要洞察人员是否完备, 以及此次航行的目标是否过大. 不能盲目乐观 , 而一旦变更发生时,要及时知会总部,而不能替别人买单.  殊不知, 你本将心向明月 奈何明月照沟渠.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2011/12/07/1582839.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>幸与不幸</title>
		<link>http://blog.donews.com/cnsoft/archive/2011/11/27/1582835.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2011/11/27/1582835.aspx#comments</comments>
		<pubDate>Sun, 27 Nov 2011 05:44:25 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[NoteBooks/ 朝花夕拾]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582835</guid>
		<description><![CDATA[昨天发现log中有一段异常的日志.如果那样的话 会出大问题&#8230; 结果查了一下代码, 我竟然还有一个判断. 保证了一次的处理.
不会被重复的请求影响&#8230; 真是神来之笔&#8230;  这阵子神经是越发的紧张&#8230; 而愁人的是我快成十万个为什么了,什么都来问我&#8230;
地球离了我 就不转了么? 下个月想休息休息了. 咱也歇歇年假?
#程序这行还是需要保持一贯的严谨性. 保证条件分支的高覆盖. 于人于己百利无一害.
]]></description>
			<content:encoded><![CDATA[<p>昨天发现log中有一段异常的日志.如果那样的话 会出大问题&#8230; 结果查了一下代码, 我竟然还有一个判断. 保证了一次的处理.<br />
不会被重复的请求影响&#8230; 真是神来之笔&#8230;  这阵子神经是越发的紧张&#8230; 而愁人的是我快成十万个为什么了,什么都来问我&#8230;<br />
地球离了我 就不转了么? 下个月想休息休息了. 咱也歇歇年假?</p>
<p>#程序这行还是需要保持一贯的严谨性. 保证条件分支的高覆盖. 于人于己百利无一害.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2011/11/27/1582835.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>时间即使再紧迫也不能压缩的时间就是充分测试.</title>
		<link>http://blog.donews.com/cnsoft/archive/2011/11/21/1582831.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2011/11/21/1582831.aspx#comments</comments>
		<pubDate>Mon, 21 Nov 2011 15:28:27 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582831</guid>
		<description><![CDATA[RT: 稳定压倒一切. 第一个目标就是要保证游戏的可持续性. 数值调整以及很多工作都可以在这个基础上做。要知道没有这个根基，一切都是零. 就算时间再紧,不能压缩的就是充分测试, bot测试,QA测试,真人测试. 都pass之后,才可以给玩家!!
同样的错误不能再犯.
最近也发现,其实一些问题应该是可以提前发现的 只要测试充分.我指的是QA无法发现的问题, 现在BOT基本能发现大量行为之后的bug. 剩余的就是代码的 数据的错误了.   代码不具备复用性,还被到处使用..  直到有一天有人发现原来这个代码有bug&#8230;.
但从来没有人在此之前测试过&#8230;  如果能结合驱动测试就好了.需要的只是编写一个测试用例, 是不是更高级了, 不再去点来点去的测试UI了. 而且测试的效果更加明显, 更科学.
Test Driven Development.  是有意义的. 
延展阅读: http://onlamp.com/pub/a/python/2004/12/02/tdd_pyunit.html
]]></description>
			<content:encoded><![CDATA[<p>RT: 稳定压倒一切. 第一个目标就是要保证游戏的可持续性. 数值调整以及很多工作都可以在这个基础上做。要知道没有这个根基，一切都是零. 就算时间再紧,不能压缩的就是充分测试, bot测试,QA测试,真人测试. 都pass之后,才可以给玩家!!<br />
同样的错误不能再犯.<br />
最近也发现,其实一些问题应该是可以提前发现的 只要测试充分.我指的是QA无法发现的问题, 现在BOT基本能发现大量行为之后的bug. 剩余的就是代码的 数据的错误了.   代码不具备复用性,还被到处使用..  直到有一天有人发现原来这个代码有bug&#8230;.<br />
但从来没有人在此之前测试过&#8230;  如果能结合驱动测试就好了.需要的只是编写一个测试用例, 是不是更高级了, 不再去点来点去的测试UI了. 而且测试的效果更加明显, 更科学.<br />
Test Driven Development.  是有意义的. <br />
延展阅读: <a href="http://onlamp.com/pub/a/python/2004/12/02/tdd_pyunit.html">http://onlamp.com/pub/a/python/2004/12/02/tdd_pyunit.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2011/11/21/1582831.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>11.22 相约神骑世界,我们不为漂亮而死</title>
		<link>http://blog.donews.com/cnsoft/archive/2011/11/19/1582822.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2011/11/19/1582822.aspx#comments</comments>
		<pubDate>Sat, 19 Nov 2011 14:27:36 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/archive/2011/11/19/1582822.aspx</guid>
		<description><![CDATA[今天依旧是个繁忙的周六. 依旧到公司加班.回家时,依然是母亲忙碌的身影,和熟睡的孩子。
不经意错过了,足协杯泰达的生死战. 结局竟然如此让我震撼,说实话,我看到这个消息的时候,我的眼泪都快出来了.
我相信这是一种启示, 天道酬勤.
继续努力奋斗中.11/22  12/9 重大的时刻即将来临.
希望能对得起兄弟们的血汗付出,能给大家的生活添一份美好回忆.
11.22 欢迎你来. 

]]></description>
			<content:encoded><![CDATA[<p>今天依旧是个繁忙的周六. 依旧到公司加班.回家时,依然是母亲忙碌的身影,和熟睡的孩子。<br />
不经意错过了,足协杯泰达的生死战. 结局竟然如此让我震撼,说实话,我看到这个消息的时候,我的眼泪都快出来了.<br />
我相信这是一种启示, 天道酬勤.<br />
继续努力奋斗中.<span style="color: #800000"><strong>11/22  12/9 </strong></span>重大的时刻即将来临.<br />
希望能对得起兄弟们的血汗付出,能给大家的生活添一份美好回忆.</p>
<h1><strong>11.22 欢迎你来. </strong></h1>
<p><a href="http://ka.sina.com.cn/info/4288.html" target="_blank"><img class="alignnone" src="http://www.sqsj.cn/images/landing/cover_ad2.jpg" alt="" width="594" height="320" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2011/11/19/1582822.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用asyncore的总结</title>
		<link>http://blog.donews.com/cnsoft/archive/2011/11/17/1582812.aspx</link>
		<comments>http://blog.donews.com/cnsoft/archive/2011/11/17/1582812.aspx#comments</comments>
		<pubDate>Thu, 17 Nov 2011 05:52:16 +0000</pubDate>
		<dc:creator>小糊涂&#124;cnsoft</dc:creator>
				<category><![CDATA[AskGoogle/搜索]]></category>

		<guid isPermaLink="false">http://blog.donews.com/cnsoft/?p=1582812</guid>
		<description><![CDATA[因为引擎的原因,逼得我用aysncore这个module 写了一个 proxyserver.  用于中转与billing服务器的数据收发. 话说一不小心,断断续续 大大小小 竟然改了大半年. 闲下来的时候,我觉得还是有必要梳理一下,免得日久遗忘了.
对比第一版和目前的版本, 我想有几个点是很重要的.
0.尽早测试,边界测试也很必要.没有环境的话,可以写测试函数,模拟调用. 不能等,等真的上了实际运行环境,你会发现测试起来会更麻烦,更困难.  貌似这是新人经常有的心理, 总以为等到后面就会容易了.
1. 要相信一些既定的现实.  asyncore 这个模块是可以用的. 但是要用对了. 不能在继承了asyncore.dispatcher 之后 不调用 它的函数.那样会遗漏一些处理.导致不确定的问题. 具体些.
myDispatcher(asyncore.dispatcher):
def   close(self):
asyncore.dispatcher.close()  #must call it.
#some code your wirttern
2. 要怀疑一些既定的现实:  也许你想不到asyncore 的模块2.2 时是好用的 但是后来2.5 到2.6 都有一些或多或少的bug.   这一点可以从google查询得知.  所以我们需要做一些修改.  比如:默认 超时时间是30S 实际上需要我们自己调整为一个合理的数值, 我最后用的是 0.1    asyncore.loop(0.1, use_poll, self.socketMap) .  不然会有响应延迟的情况.  还有一些判定socket 状态的部分.  所以我拿了python2.7 的这个asyncore 模块然后 merge了一些有用的修改.
下面列举一些遇到的一些错误和解决的方法.
1. 9  Bad [...]]]></description>
			<content:encoded><![CDATA[<p>因为引擎的原因,逼得我用aysncore这个module 写了一个 proxyserver.  用于中转与billing服务器的数据收发. 话说一不小心,断断续续 大大小小 竟然改了大半年. 闲下来的时候,我觉得还是有必要梳理一下,免得日久遗忘了.<br />
对比第一版和目前的版本, 我想有几个点是很重要的.</p>
<p>0.尽早测试,边界测试也很必要.没有环境的话,可以写测试函数,模拟调用. 不能等,等真的上了实际运行环境,你会发现测试起来会更麻烦,更困难.  貌似这是新人经常有的心理, 总以为等到后面就会容易了.</p>
<p>1. 要相信一些既定的现实.  asyncore 这个模块是可以用的. 但是要用对了. 不能在继承了asyncore.dispatcher 之后 不调用 它的函数.那样会遗漏一些处理.导致不确定的问题. 具体些.</p>
<p>myDispatcher(asyncore.dispatcher):<br />
def   close(self):</p>
<p>asyncore.dispatcher.close()  #must call it.</p>
<p>#some code your wirttern<br />
2. 要怀疑一些既定的现实:  也许你想不到asyncore 的模块2.2 时是好用的 但是后来2.5 到2.6 都有一些或多或少的bug.   这一点可以从google查询得知.  所以我们需要做一些修改.  比如:默认 超时时间是30S 实际上需要我们自己调整为一个合理的数值, 我最后用的是 0.1    asyncore.loop(0.1, use_poll, self.socketMap) .  不然会有响应延迟的情况.  还有一些判定socket 状态的部分.  所以我拿了python2.7 的这个asyncore 模块然后 merge了一些有用的修改.</p>
<p>下面列举一些遇到的一些错误和解决的方法.<br />
1. 9  Bad File Descriptor .</p>
<p>这个错误实际上是没有正确关闭socket channel导致的. 而正确关闭的方法就是必须要call  asyncore.dispatcher.close()  .  你可以追踪一下代码,发现这个函数会从 socketMap 里删除当前的socket 的handle.  如果遗漏了close 的调用. 或者不正确调用close 都有可能导致这个错误的抛出.<br />
2. Threaded aysncore loop .</p>
<p>asyncore 的 loop 函数不是线程的. 所以如果要独立使用这个函数, 需要自己开一个线程. 而不是直接调用,否则会阻塞主线程.  第一版我在每个进程里是共用asyncore的sockmap的. 第二版我把这些分开了,各自负责各自的,这样就不会互相影响了. 不然某个socket有问题都会触发异常.. (最后的结果其实还不是这个问题,是close没有处理好 就是没有管理好socketmap)</p>
<p>比如：<br />
asyn_thread = Thread(target=self._async_loop,<br />
args=(),<br />
name=&#8217;%s asyncore thread&#8217; % &#8220;proxy slave&#8221;)<br />
#if disable mode, ignore create thread realy<br />
asyn_thread.start()      这样就ok 了.   async_loop 函数就是用老套的loop</p>
<p>要注意的一点是: 这需要自己管理socketmap,  这样的话开多少个线程都没关系..  不然都用 aysncore.loop  会互相影响..<br />
我的第一个版本就是用一个 asyncore.loop 然后当某个socket关闭的时候 会导致异常, 抛出那个  error  9  bad file descriptor . 而的糟糕是, 第一个版本里, 在proxy 没有建立好连接的时候, 会关掉所有请求的client连接. 结果就是恶性循环, 抛出异常后, 就关闭所有的  asyncore.close_all() ..  实际上需要解决的是保证 close() 被正确调用.. 然后从 asyncore.socketMap 里移除.</p>
<p>3. 谨慎处理一些容易抛出异常的函数.  比如: try connect 异常时要重新设置逻辑连接状态为 False..   不能再等handle_except 处理. 一般不需要自己处理这个.  默认实际上是调用 handle_close的</p>
<p>我在上面提到的线程函数 asyn_loop 有加上重连机制. 以便在连接中断后能处理. 恢复连接.</p>
<p>def _async_loop(self):<br />
print &#8216;create asynloop for &#8216;,self<br />
while True:<br />
#step 1. try to ensure wasConnected<br />
obj = self<br />
while not obj._wasConnected:<br />
try:<br />
self.tryconnect()<br />
obj._wasConnected = True<br />
time.sleep(3)<br />
except Exception,e:<br />
self.close()<br />
obj._wasConnected = False<br />
print &#8216;during reconnect occur&#8217;,e<br />
while obj._wasConnected:<br />
use_poll = False<br />
if hasattr(select, &#8216;poll&#8217;):<br />
use_poll = True<br />
try:<br />
#use_poll = False #hard code . for windows select mode has been test 2011-10-21<br />
print self._asyn,&#8217;Asyn Monitor loop is running use poll? %s&#8217;%use_poll,self.socketMap<br />
asyncore.loop(0.1, use_poll, self.socketMap)#,count=1)<br />
except select.error,args:<br />
#if select.error.<br />
from errno import EINTR<br />
if args[0] == EINTR:<br />
print(&#8216;Shutdown not completely clean&#8230;&#8217;)<br />
else:<br />
pass<br />
#server mode<br />
if not self.connected:<br />
if self.accepting:<br />
if len(self.socketMap) ==1:<br />
print &#8216;only server is running no client&#8217;,self._wasConnected<br />
self._wasConnected = True<br />
else:<br />
obj._wasConnected = False<br />
else:<br />
obj._wasConnected = False<br />
#ignore.</p>
<p>#to trigger connected = False.. 2.7 seems connected will wait handle_connect function. support logic connect state.<br />
#which close socket should be handled by dispatcher self.<br />
#should asyncore.close_all() ?<br />
#self.close()<br />
self._wasConnected = False<br />
print  self._asyn,&#8217;Asyn Monitor Disconnect&#8217;,self.socketMap,obj.connected</p>
<p>总的来说,用asyncore 模块就是异步的方式,可以充分利用系统的处理能力,应该说效率还是蛮高的, 在linux上实际上是用epoll 模块. 可以支持很大的吞吐.开销也小. 就像windows上的完成端口..</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.donews.com/cnsoft/archive/2011/11/17/1582812.aspx/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.319 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-11 12:09:20 -->
<!-- Compression = gzip -->
