<?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>佳音的博客</title>
	<atom:link href="http://blog.00rz.com/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.00rz.com</link>
	<description>方乃做人之本，圆乃处世之道</description>
	<lastBuildDate>Wed, 25 Aug 2010 04:25:24 +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>关于 ubuntu 下 eclipse  代码编辑区域 在代码 补全 后不能编辑 的笔记</title>
		<link>http://blog.00rz.com/2010/08/%e5%85%b3%e4%ba%8e-ubuntu-%e4%b8%8b-eclipse-%e4%bb%a3%e7%a0%81%e7%bc%96%e8%be%91%e5%8c%ba%e5%9f%9f-%e5%9c%a8%e4%bb%a3%e7%a0%81-%e8%a1%a5%e5%85%a8-%e5%90%8e%e4%b8%8d%e8%83%bd%e7%bc%96%e8%be%91.html</link>
		<comments>http://blog.00rz.com/2010/08/%e5%85%b3%e4%ba%8e-ubuntu-%e4%b8%8b-eclipse-%e4%bb%a3%e7%a0%81%e7%bc%96%e8%be%91%e5%8c%ba%e5%9f%9f-%e5%9c%a8%e4%bb%a3%e7%a0%81-%e8%a1%a5%e5%85%a8-%e5%90%8e%e4%b8%8d%e8%83%bd%e7%bc%96%e8%be%91.html#comments</comments>
		<pubDate>Wed, 25 Aug 2010 04:25:24 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=254</guid>
		<description><![CDATA[以前没有发现这个问题， 今天下了一个eclipse3.6 装了之后，发现编辑代码时，补全之后 编辑器貌似还在获得焦点，
但是不能type 字符，很奇怪，
google 了一下，没有找到，解决方案，
这次baidu很出息，找到是scim问题， 据说还是一个老问题， 
修改
/etc/X11/xinit/xinput.d/scim
将原来的
GTK_IM_MODULE=xim
QT_IM_MODULE=xim
改成
GTK_IM_MODULE=scim
QT_IM_MODULE=scim
之前在切换 terminal 的之后， 开始的时候键盘反应慢的问题也解决了。



]]></description>
			<content:encoded><![CDATA[<p>以前没有发现这个问题， 今天下了一个eclipse3.6 装了之后，发现编辑代码时，补全之后 编辑器貌似还在获得焦点，<br />
但是不能type 字符，很奇怪，<br />
google 了一下，没有找到，解决方案，<br />
这次baidu很出息，找到是scim问题， 据说还是一个老问题， </p>
<p>修改<br />
/etc/X11/xinit/xinput.d/scim<br />
将原来的<br />
GTK_IM_MODULE=xim<br />
QT_IM_MODULE=xim<br />
改成<br />
GTK_IM_MODULE=scim<br />
QT_IM_MODULE=scim</p>
<p>之前在切换 terminal 的之后， 开始的时候键盘反应慢的问题也解决了。</p>
<p><map name='google_ad_map_254_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/254?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_254_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=254&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F08%2F%25e5%2585%25b3%25e4%25ba%258e-ubuntu-%25e4%25b8%258b-eclipse-%25e4%25bb%25a3%25e7%25a0%2581%25e7%25bc%2596%25e8%25be%2591%25e5%258c%25ba%25e5%259f%259f-%25e5%259c%25a8%25e4%25bb%25a3%25e7%25a0%2581-%25e8%25a1%25a5%25e5%2585%25a8-%25e5%2590%258e%25e4%25b8%258d%25e8%2583%25bd%25e7%25bc%2596%25e8%25be%2591.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/08/%e5%85%b3%e4%ba%8e-ubuntu-%e4%b8%8b-eclipse-%e4%bb%a3%e7%a0%81%e7%bc%96%e8%be%91%e5%8c%ba%e5%9f%9f-%e5%9c%a8%e4%bb%a3%e7%a0%81-%e8%a1%a5%e5%85%a8-%e5%90%8e%e4%b8%8d%e8%83%bd%e7%bc%96%e8%be%91.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter 更新 for 2010-07-25</title>
		<link>http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25-2.html</link>
		<comments>http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25-2.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 08:20:00 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[twtteen]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25-2.html</guid>
		<description><![CDATA[
firefox + foxyproxy + ssh 比vpn 好用多了 #

Powered by Twitter Tools



]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>firefox + foxyproxy + ssh 比vpn 好用多了 <a href="http://twitter.com/zhangjiayin/statuses/19300009185" class="aktt_tweet_time">#</a></li>
</ul>
<p class="aktt_credit">Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>
<p><map name='google_ad_map_251_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/251?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_251_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=251&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F07%2Ftwitter-%25e6%259b%25b4%25e6%2596%25b0-for-2010-07-25-2.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter 更新 for 2010-07-25</title>
		<link>http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25.html</link>
		<comments>http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25.html#comments</comments>
		<pubDate>Sun, 25 Jul 2010 08:20:00 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[twtteen]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25.html</guid>
		<description><![CDATA[
firefox + foxyproxy + ssh 比vpn 好用多了 #

Powered by Twitter Tools



]]></description>
			<content:encoded><![CDATA[<ul class="aktt_tweet_digest">
<li>firefox + foxyproxy + ssh 比vpn 好用多了 <a href="http://twitter.com/zhangjiayin/statuses/19300009185" class="aktt_tweet_time">#</a></li>
</ul>
<p class="aktt_credit">Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>
<p><map name='google_ad_map_250_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/250?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_250_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=250&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F07%2Ftwitter-%25e6%259b%25b4%25e6%2596%25b0-for-2010-07-25.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/07/twitter-%e6%9b%b4%e6%96%b0-for-2010-07-25.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>High.Performance.MySQL2nd.Edition</title>
		<link>http://blog.00rz.com/2010/06/244.html</link>
		<comments>http://blog.00rz.com/2010/06/244.html#comments</comments>
		<pubDate>Thu, 03 Jun 2010 08:46:44 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[电子书]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=244</guid>
		<description><![CDATA[O&#8217;Reilly.High.Performance.MySQL,2nd.Edition
O&#8217;Reilly.High.Performance.MySQL,2nd.Edition中文版



]]></description>
			<content:encoded><![CDATA[<p><a href='http://blog.00rz.com/wp-content/uploads/2010/06/OReilly.High.Performance.MySQL2nd.Edition.pdf.tar.g'>O&#8217;Reilly.High.Performance.MySQL,2nd.Edition</a><br />
<a href='http://blog.00rz.com/wp-content/uploads/2010/06/OReilly.High.Performance.MySQL2nd.Edition-chinese.pdf.tar.g'>O&#8217;Reilly.High.Performance.MySQL,2nd.Edition中文版</a></p>
<p><map name='google_ad_map_244_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/244?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_244_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=244&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F06%2F244.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/06/244.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>git手册</title>
		<link>http://blog.00rz.com/2010/05/git%e6%89%8b%e5%86%8c.html</link>
		<comments>http://blog.00rz.com/2010/05/git%e6%89%8b%e5%86%8c.html#comments</comments>
		<pubDate>Sat, 15 May 2010 03:41:16 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=237</guid>
		<description><![CDATA[http://progit.org/book/zh/



]]></description>
			<content:encoded><![CDATA[<p>http://progit.org/book/zh/</p>
<p><map name='google_ad_map_237_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/237?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_237_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=237&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F05%2Fgit%25e6%2589%258b%25e5%2586%258c.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/05/git%e6%89%8b%e5%86%8c.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pylons 部署 + fastcgi</title>
		<link>http://blog.00rz.com/2010/05/pylons-%e9%83%a8%e7%bd%b2-fastcgi.html</link>
		<comments>http://blog.00rz.com/2010/05/pylons-%e9%83%a8%e7%bd%b2-fastcgi.html#comments</comments>
		<pubDate>Fri, 14 May 2010 08:54:47 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=234</guid>
		<description><![CDATA[http://www.rightbrainnetworks.com/blog/deploying-a-pylons-app-to-production-step-by-step-part-2-of-2/comment-page-1/#comment-27



]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rightbrainnetworks.com/blog/deploying-a-pylons-app-to-production-step-by-step-part-2-of-2/comment-page-1/#comment-27">http://www.rightbrainnetworks.com/blog/deploying-a-pylons-app-to-production-step-by-step-part-2-of-2/comment-page-1/#comment-27</a></p>
<p><map name='google_ad_map_234_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/234?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_234_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=234&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F05%2Fpylons-%25e9%2583%25a8%25e7%25bd%25b2-fastcgi.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/05/pylons-%e9%83%a8%e7%bd%b2-fastcgi.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python datamodel 貌似这页应该好好看下</title>
		<link>http://blog.00rz.com/2010/05/python-datamodel-%e8%b2%8c%e4%bc%bc%e8%bf%99%e9%a1%b5%e5%ba%94%e8%af%a5%e5%a5%bd%e5%a5%bd%e7%9c%8b%e4%b8%8b.html</link>
		<comments>http://blog.00rz.com/2010/05/python-datamodel-%e8%b2%8c%e4%bc%bc%e8%bf%99%e9%a1%b5%e5%ba%94%e8%af%a5%e5%a5%bd%e5%a5%bd%e7%9c%8b%e4%b8%8b.html#comments</comments>
		<pubDate>Thu, 13 May 2010 15:19:37 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=232</guid>
		<description><![CDATA[http://docs.python.org/reference/datamodel.html



]]></description>
			<content:encoded><![CDATA[<p>http://docs.python.org/reference/datamodel.html</p>
<p><map name='google_ad_map_232_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/232?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_232_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=232&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F05%2Fpython-datamodel-%25e8%25b2%258c%25e4%25bc%25bc%25e8%25bf%2599%25e9%25a1%25b5%25e5%25ba%2594%25e8%25af%25a5%25e5%25a5%25bd%25e5%25a5%25bd%25e7%259c%258b%25e4%25b8%258b.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/05/python-datamodel-%e8%b2%8c%e4%bc%bc%e8%bf%99%e9%a1%b5%e5%ba%94%e8%af%a5%e5%a5%bd%e5%a5%bd%e7%9c%8b%e4%b8%8b.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>the.Definitive.Guide.to.Pylons.Dec.2008.pdf</title>
		<link>http://blog.00rz.com/2010/05/the-definitive-guide-to-pylons-dec-2008-pdf.html</link>
		<comments>http://blog.00rz.com/2010/05/the-definitive-guide-to-pylons-dec-2008-pdf.html#comments</comments>
		<pubDate>Tue, 11 May 2010 16:35:02 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=227</guid>
		<description><![CDATA[Apress.the.Definitive.Guide.to.Pylons.Dec.2008



]]></description>
			<content:encoded><![CDATA[<p><a href='http://blog.00rz.com/wp-content/uploads/2010/05/Apress.the_.Definitive.Guide_.to_.Pylons.Dec.2008.pdf'>Apress.the.Definitive.Guide.to.Pylons.Dec.2008</a></p>
<p><map name='google_ad_map_227_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/227?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_227_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=227&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F05%2Fthe-definitive-guide-to-pylons-dec-2008-pdf.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/05/the-definitive-guide-to-pylons-dec-2008-pdf.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>python epoll demo</title>
		<link>http://blog.00rz.com/2010/05/python-epoll-demo.html</link>
		<comments>http://blog.00rz.com/2010/05/python-epoll-demo.html#comments</comments>
		<pubDate>Sat, 01 May 2010 06:03:41 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/2010/05/python-epoll-demo.html</guid>
		<description><![CDATA[from http://www.codexon.com/posts/debunking-the-erlang-and-haskell-hype-for-servers
epoll.py



&#160;


import select


import socket


&#160;


EPOLLIN = select.EPOLLIN


EPOLLOUT = select.EPOLLOUT


&#160;


epoll = select.epoll&#40;60000&#41;


connections = &#123;&#125;


&#160;


class Server&#40;object&#41;:


&#160; &#160; def __init__&#40;self&#41;:


&#160; &#160; &#160; &#160; sock = socket.socket&#40;socket.AF_INET, socket.SOCK_STREAM&#41;


&#160; &#160; &#160; &#160; sock.setsockopt&#40;socket.SOL_SOCKET, socket.SO_REUSEADDR, 1&#41;


&#160; &#160; &#160; &#160; sock.setblocking&#40;0&#41;


&#160; &#160; &#160; &#160; sock.bind&#40;&#40;&#8221;, 8050&#41;&#41;


&#160; &#160; &#160; &#160; sock.listen&#40;60000&#41;


&#160; &#160; &#160; &#160; self.socket = sock


&#160;


&#160; &#160; &#160; &#160; fileno = sock.fileno&#40;&#41;


&#160; &#160; [...]]]></description>
			<content:encoded><![CDATA[<p>from http://www.codexon.com/posts/debunking-the-erlang-and-haskell-hype-for-servers<br />
epoll.py</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">select</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">import</span> <span class="kw3">socket</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">EPOLLIN = <span class="kw3">select</span>.<span class="me1">EPOLLIN</span></div>
</li>
<li class="li1">
<div class="de1">EPOLLOUT = <span class="kw3">select</span>.<span class="me1">EPOLLOUT</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">epoll = <span class="kw3">select</span>.<span class="me1">epoll</span><span class="br0">&#40;</span><span class="nu0">60000</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">connections = <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Server<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sock = <span class="kw3">socket</span>.<span class="kw3">socket</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">AF_INET</span>, <span class="kw3">socket</span>.<span class="me1">SOCK_STREAM</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sock.<span class="me1">setsockopt</span><span class="br0">&#40;</span><span class="kw3">socket</span>.<span class="me1">SOL_SOCKET</span>, <span class="kw3">socket</span>.<span class="me1">SO_REUSEADDR</span>, <span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sock.<span class="me1">setblocking</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sock.<span class="me1">bind</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="st0">&#8221;</span>, <span class="nu0">8050</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sock.<span class="me1">listen</span><span class="br0">&#40;</span><span class="nu0">60000</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw3">socket</span> = sock</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; fileno = sock.<span class="me1">fileno</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; connections<span class="br0">&#91;</span>fileno<span class="br0">&#93;</span> = <span class="kw2">self</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; epoll.<span class="me1">register</span><span class="br0">&#40;</span>fileno, EPOLLIN<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> onInput<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; sock, address = <span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">accept</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; Client<span class="br0">&#40;</span>sock<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Client<span class="br0">&#40;</span><span class="kw2">object</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">input</span> &nbsp;= <span class="st0">&#8221;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; output = <span class="st0">&quot;HTTP/1.0 200 OK<span class="es0">\r</span><span class="es0">\n</span>Content-Length: 5<span class="es0">\r</span><span class="es0">\n</span><span class="es0">\r</span><span class="es0">\n</span>Pong!<span class="es0">\r</span><span class="es0">\n</span>&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> <span class="kw4">__init__</span><span class="br0">&#40;</span><span class="kw2">self</span>, sock<span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sock.<span class="me1">setblocking</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fileno = sock.<span class="me1">fileno</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; epoll.<span class="me1">register</span><span class="br0">&#40;</span>fileno, EPOLLIN|EPOLLOUT<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; connections<span class="br0">&#91;</span>fileno<span class="br0">&#93;</span> = <span class="kw2">self</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw3">socket</span> = sock</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> onInput<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; newdata = <span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">recv</span><span class="br0">&#40;</span><span class="nu0">1024</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span>newdata<span class="br0">&#41;</span> <span class="kw1">is</span> <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw2">input</span> += newdata</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">def</span> onOutput<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; sent = <span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">send</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">output</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">output</span> = <span class="kw2">self</span>.<span class="me1">output</span><span class="br0">&#91;</span>sent:<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw2">len</span><span class="br0">&#40;</span><span class="kw2">self</span>.<span class="me1">output</span><span class="br0">&#41;</span> <span class="kw1">is</span> <span class="nu0">0</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">def</span> close<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; fileno = <span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">fileno</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">del</span> connections<span class="br0">&#91;</span>fileno<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; epoll.<span class="me1">unregister</span><span class="br0">&#40;</span>fileno<span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>.<span class="kw3">socket</span>.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">Server<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">while</span> <span class="nu0">1</span>:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="kw1">for</span> fd, event <span class="kw1">in</span> epoll.<span class="me1">poll</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> event &amp; EPOLLIN:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connections<span class="br0">&#91;</span>fd<span class="br0">&#93;</span>.<span class="me1">onInput</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> event &amp; EPOLLOUT:</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; connections<span class="br0">&#91;</span>fd<span class="br0">&#93;</span>.<span class="me1">onOutput</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><map name='google_ad_map_221_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/221?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_221_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=221&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F05%2Fpython-epoll-demo.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/05/python-epoll-demo.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>了解 epoll 之 python</title>
		<link>http://blog.00rz.com/2010/04/%e4%ba%86%e8%a7%a3-epoll-%e4%b9%8b-python.html</link>
		<comments>http://blog.00rz.com/2010/04/%e4%ba%86%e8%a7%a3-epoll-%e4%b9%8b-python.html#comments</comments>
		<pubDate>Fri, 30 Apr 2010 15:46:34 +0000</pubDate>
		<dc:creator>佳音</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://blog.00rz.com/?p=217</guid>
		<description><![CDATA[http://scotdoyle.com/python-epoll-howto.html



]]></description>
			<content:encoded><![CDATA[<p>http://scotdoyle.com/python-epoll-howto.html</p>
<p><map name='google_ad_map_217_4664d84c6fd17adb'>
<area shape='rect' href='http://imageads.googleadservices.com/pagead/imgclick/217?pos=0' coords='1,2,367,28' />
<area shape='rect' href='http://services.google.com/feedback/abg' coords='384,10,453,23'/></map>
<img usemap='#google_ad_map_217_4664d84c6fd17adb' border='0' src='http://imageads.googleadservices.com/pagead/ads?format=468x30_aff_img&amp;client=&amp;channel=&amp;output=png&amp;cuid=217&amp;url= http%3A%2F%2Fblog.00rz.com%2F2010%2F04%2F%25e4%25ba%2586%25e8%25a7%25a3-epoll-%25e4%25b9%258b-python.html' /></p>]]></content:encoded>
			<wfw:commentRss>http://blog.00rz.com/2010/04/%e4%ba%86%e8%a7%a3-epoll-%e4%b9%8b-python.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
