﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Study &amp; Summary -随笔分类-java组件与框架</title><link>http://www.blogjava.net/wfeng007/category/7214.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 07:59:01 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 07:59:01 GMT</pubDate><ttl>60</ttl><item><title>httpComponents 果然不俗</title><link>http://www.blogjava.net/wfeng007/archive/2008/05/18/201283.html</link><dc:creator>wfeng007</dc:creator><author>wfeng007</author><pubDate>Sun, 18 May 2008 10:42:00 GMT</pubDate><guid>http://www.blogjava.net/wfeng007/archive/2008/05/18/201283.html</guid><wfw:comment>http://www.blogjava.net/wfeng007/comments/201283.html</wfw:comment><comments>http://www.blogjava.net/wfeng007/archive/2008/05/18/201283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wfeng007/comments/commentRss/201283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wfeng007/services/trackbacks/201283.html</trackback:ping><description><![CDATA[<br />
httpComponents 似乎是原先 apache commons HttpClient 重构的项目。<br />
这个项目中除了原先作为 httpClient的项目之外还有一个http底层实现HttpCore项目。<br />
本来在写一个tcp/ip 服务器程序时想找一个http message解析器的没想到找到了 HttpComponents。<br />
虽然刚刚beta1版本，但是其代码确实比较经典。<br />
<br />
分析其协议底层代码（主要是nio）,对io部分还进行了通用型的封装。比如EnpandableByteBuffer CharArrayBuffer等等。<br />
粗略了看了一下nio通信部分的实现，也是那种比较经典的模式。<br />
从作者对继承与实现的使用也很清晰，感觉应该是经过长时间整理分析的结果。<br />
而HttpMessage族作为http消息包的结构分解也基本符合rfc1945 rfc2116。<br />
总之值得整体研究一番，学习nio、（http）协议实现、甚至java基本语法使用的好教材。<br />
<br />
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/wfeng007/aggbug/201283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wfeng007/" target="_blank">wfeng007</a> 2008-05-18 18:42 <a href="http://www.blogjava.net/wfeng007/archive/2008/05/18/201283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java NIO: selector 机制分析</title><link>http://www.blogjava.net/wfeng007/archive/2008/04/06/191112.html</link><dc:creator>wfeng007</dc:creator><author>wfeng007</author><pubDate>Sun, 06 Apr 2008 13:03:00 GMT</pubDate><guid>http://www.blogjava.net/wfeng007/archive/2008/04/06/191112.html</guid><wfw:comment>http://www.blogjava.net/wfeng007/comments/191112.html</wfw:comment><comments>http://www.blogjava.net/wfeng007/archive/2008/04/06/191112.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wfeng007/comments/commentRss/191112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wfeng007/services/trackbacks/191112.html</trackback:ping><description><![CDATA[<br />
在学习IBM的那个NIO教程时发现，异步IO这部分的代码居然有个严重问题。<br />
即client突然中断 tcp连接时。服务端会进入一个令人崩溃的无限循环。<br />
<br />
后来发现其实是因为selector在tcp连接已经断开时，还是能够select()出OP_READ状态的SocketChannel的SelectedKey。<br />
这时需要通过Channel读取数据到buffer的过程时的返回值来判断。<br />
这个反回值其实就是读取的字节数。该数字为0时说明就是一般的没有数据可读取，而当为-1时其实表示底层tcp已经断开了。(但IE的连接有点不同,read时直接给出Exception,反正这些情况都要判断了.)<br />
<br />
<br />
之后又想到，那如何注销selector与SocketChannel之间的关联呢？selector内部基本的运作是怎么样的呢？ javadoc中写的是key.cancel()方法。socket的close()在windows似乎也有一样的功能。<br />
<br />
<br />
这里可以用两张图来表示。<br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/wfeng007/DSC00693.JPG" height="800" width="600" /><br />
<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/wfeng007/DSC00698.JPG" height="800" width="600" /><br />
<img src ="http://www.blogjava.net/wfeng007/aggbug/191112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wfeng007/" target="_blank">wfeng007</a> 2008-04-06 21:03 <a href="http://www.blogjava.net/wfeng007/archive/2008/04/06/191112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>