锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲中文日韩久久AV乱码,亚洲精品国产精品乱码不卡√,亚洲伊人久久大香线蕉综合图片http://www.tkk7.com/killme2008/category/37396.html鐢熸椿銆佺▼搴忋佹湭鏉?/description>zh-cnThu, 17 Nov 2011 13:44:56 GMTThu, 17 Nov 2011 13:44:56 GMT60婕旂ずTCP鎱㈠惎鍔ㄥ拰婊戝姩紿楀彛鏈哄埗鐨勫姩鐢?/title><link>http://www.tkk7.com/killme2008/archive/2011/11/16/363913.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Tue, 15 Nov 2011 23:34:00 GMT</pubDate><guid>http://www.tkk7.com/killme2008/archive/2011/11/16/363913.html</guid><wfw:comment>http://www.tkk7.com/killme2008/comments/363913.html</wfw:comment><comments>http://www.tkk7.com/killme2008/archive/2011/11/16/363913.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/killme2008/comments/commentRss/363913.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/killme2008/services/trackbacks/363913.html</trackback:ping><description><![CDATA[浠婂ぉ鐪嬪埌鐨勪竴涓紨紺篢CP鎱㈠惎鍔ㄥ拰婊戝姩紿楀彛鏈哄埗鐨勫姩鐢伙紝寰堝艦璞?br /> <a target="_blank">osischool.com</a><br /> <embed type="application/x-shockwave-flash" width="620" height="400" src="http://www.tkk7.com/Files/killme2008/tcp_slow_start.zip"></embed><img src ="http://www.tkk7.com/killme2008/aggbug/363913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/killme2008/" target="_blank">dennis</a> 2011-11-16 07:34 <a href="http://www.tkk7.com/killme2008/archive/2011/11/16/363913.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>緗戠粶緙栫▼涓璑agle綆楁硶鍜孌elayed ACK鐨勬祴璇?/title><link>http://www.tkk7.com/killme2008/archive/2011/06/30/353441.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Thu, 30 Jun 2011 08:01:00 GMT</pubDate><guid>http://www.tkk7.com/killme2008/archive/2011/06/30/353441.html</guid><wfw:comment>http://www.tkk7.com/killme2008/comments/353441.html</wfw:comment><comments>http://www.tkk7.com/killme2008/archive/2011/06/30/353441.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/killme2008/comments/commentRss/353441.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/killme2008/services/trackbacks/353441.html</trackback:ping><description><![CDATA[<br />    <a >Nagle綆楁硶</a>鐨勭珛鎰忔槸鑹ソ鐨勶紝閬垮厤緗戠粶涓厖濉炲皬灝佸寘錛屾彁楂樼綉緇滅殑鍒╃敤鐜囥備絾鏄綋Nagle綆楁硶閬囧埌<a >delayed ACK</a>鎮插墽灝卞彂鐢熶簡銆侱elayed ACK鐨勬湰鎰忎篃鏄負浜嗘彁楂楾CP鎬ц兘錛岃窡搴旂瓟鏁版嵁鎹庡甫涓夾CK錛屽悓鏃墮伩鍏?a >緋婃秱紿楀彛緇煎悎鐥?/a>錛屼篃鍙互涓涓猘ck紜澶氫釜孌墊潵鑺傜渷寮閿銆?br />    鎮插墽鍙戠敓鍦ㄨ繖縐嶆儏鍐碉紝鍋囪涓绔彂閫佹暟鎹茍絳夊緟鍙︿竴绔簲絳旓紝鍗忚涓婂垎涓哄ご閮ㄥ拰鏁版嵁錛屽彂閫佺殑鏃跺欎笉騫稿湴閫夋嫨浜唚rite-write錛岀劧鍚庡啀read錛屼篃灝辨槸鍏堝彂閫佸ご閮紝鍐嶅彂閫佹暟鎹紝鏈鍚庣瓑寰呭簲絳斻傚彂閫佺鐨勪吉浠g爜鏄繖鏍?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">write(head);<br />write(body);<br />read(response);</span></div><br />鎺ユ敹绔殑澶勭悊浠g爜綾諱技榪欐牱錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">read(request);<br />process(request);<br />write(response);</span></div><br />   榪欓噷鍋囪head鍜宐ody閮芥瘮杈冨皬錛屽綋榛樿鍚敤nagle綆楁硶錛屽茍涓旀槸絎竴嬈″彂閫佺殑鏃跺欙紝鏍規嵁nagle綆楁硶錛岀涓涓head鍙互绔嬪嵆鍙戦侊紝鍥犱負娌℃湁絳夊緟紜鐨勬錛涙帴鏀剁鏀跺埌head錛屼絾鏄寘涓嶅畬鏁達紝緇х畫絳夊緟body杈懼埌騫跺歡榪烝CK錛涘彂閫佺緇х畫鍐欏叆body錛岃繖鏃跺檔agle綆楁硶璧蜂綔鐢ㄤ簡錛屽洜涓篽ead榪樻病鏈夎ACK錛屾墍浠ody瑕佸歡榪熷彂閫併傝繖灝遍犳垚浜嗗彂閫佺鍜屾帴鏀剁閮藉湪絳夊緟瀵規柟鍙戦佹暟鎹殑鐜拌薄錛屽彂閫佺絳夊緟鎺ユ敹绔疉CK head浠ヤ究緇х畫鍙戦乥ody錛岃屾帴鏀剁鍦ㄧ瓑寰呭彂閫佹柟鍙戦乥ody騫跺歡榪烝CK錛屾偛鍓х殑鏃犱互璦璇傝繖縐嶆椂鍊欏彧鏈夌瓑寰呬竴绔秴鏃跺茍鍙戦佹暟鎹墠鑳界戶緇線涓嬭蛋銆?br /><br />   姝e洜涓簄agle綆楁硶鍜宒elayed ack鐨勫獎鍝嶏紝鍐嶅姞涓婅繖縐峸rite-write-read鐨勭紪紼嬫柟寮忛犳垚浜嗗緢澶氱綉璐村湪璁ㄨ涓轟粈涔堣嚜宸卞啓鐨勭綉緇滅▼搴忔ц兘閭d箞宸傜劧鍚庡緢澶氫漢浼氬湪甯栧瓙閲屽緩璁鐢∟agle綆楁硶鍚э紝璁劇疆TCP_NODELAY涓簍rue鍗沖彲紱佺敤nagle綆楁硶銆備絾鏄繖鐪熺殑鏄В鍐抽棶棰樼殑鍞竴鍔炴硶鍜屾渶濂藉姙娉曞悧錛?br /><br />   鍏跺疄闂涓嶆槸鍑哄湪nagle綆楁硶韜笂鐨勶紝闂鏄嚭鍦╳rite-write-read榪欑搴旂敤緙栫▼涓娿傜鐢╪agle綆楁硶鍙互鏆傛椂瑙e喅闂錛屼絾鏄鐢╪agle綆楁硶涔熷甫鏉ュ緢澶у潖澶勶紝緗戠粶涓厖濉炵潃灝忓皝鍖咃紝緗戠粶鐨勫埄鐢ㄧ巼涓婁笉鍘伙紝鍦ㄦ瀬绔儏鍐典笅錛屽ぇ閲忓皬灝佸寘瀵艱嚧緗戠粶鎷ュ鐢氳嚦宕╂簝銆傚洜姝わ紝鑳戒笉紱佹榪樻槸涓嶇姝㈢殑濂斤紝鍚庨潰鎴戜滑浼氳涓嬩粈涔堟儏鍐典笅鎵嶉渶瑕佺鐢╪agle綆楁硶銆傚澶у鏁板簲鐢ㄦ潵璇達紝涓鑸兘鏄繛緇殑璇鋒眰——搴旂瓟妯″瀷錛屾湁璇鋒眰鍚屾椂鏈夊簲絳旓紝閭d箞璇鋒眰鍖呯殑ACK鍏跺疄鍙互寤惰繜鍒拌窡鍝嶅簲涓璧峰彂閫侊紝鍦ㄨ繖縐嶆儏鍐典笅錛屽叾瀹炰綘鍙閬垮厤write-write-read褰㈠紡鐨勮皟鐢ㄥ氨鍙互閬垮厤寤惰繜鐜拌薄錛屽埄鐢╳ritev鍋氳仛闆嗗啓鎴栬呭皢head鍜宐ody涓璧峰啓錛岀劧鍚庡啀read錛屽彉鎴恮rite-read-write-read鐨勫艦寮忔潵璋冪敤錛屽氨鏃犻渶紱佺敤nagle綆楁硶涔熷彲浠ュ仛鍒頒笉寤惰繜銆?br /><br />   writev鏄郴緇熻皟鐢紝鍦↗ava閲屾槸鐢ㄥ埌<a >GatheringByteChannel</a>.write(ByteBuffer[] srcs, int offset, int length)鏂規硶鏉ュ仛鑱氶泦鍐欍傝繖閲屽彲鑳借繕鏈変竴鐐瑰肩殑鎻愪笅錛屽緢澶氬悓瀛︾湅java nio妗嗘灦鍑犱箮閮戒笉鐢ㄨ繖涓獁ritev璋冪敤錛岃繖鏄湁鍘熷洜鐨勩備富瑕佹槸鍥犱負Java鐨剋rite鏈韓瀵笲yteBuffer鏈夊仛涓存椂緙撳瓨錛岃寃ritev娌℃湁鍋氱紦瀛橈紝瀵艱嚧嫻嬭瘯鏉ョ湅write鍙嶈屾瘮writev鏇撮珮鏁堬紝鍥犳閫氬父浼氭洿鎺ㄨ崘鐢ㄦ埛灝唄ead鍜宐ody鏀懼埌鍚屼竴涓狟uffer閲屾潵閬垮厤璋冪敤writev銆?br /><br />   涓嬮潰鎴戜滑灝嗗仛涓疄闄呯殑浠g爜嫻嬭瘯鏉ョ粨鏉熻璁恒傝繖涓緥瀛愬緢綆鍗曪紝瀹㈡埛绔彂閫佷竴琛屾暟鎹埌鏈嶅姟鍣紝鏈嶅姟鍣ㄧ畝鍗曞湴灝嗚繖琛屾暟鎹繑鍥炪傚鎴風鍙戦佺殑鏃跺欏彲浠ラ夋嫨鍒嗕袱嬈″彂錛岃繕鏄竴嬈″彂閫併傚垎涓ゆ鍙戝氨鏄痺rite-write-read錛屼竴嬈″彂灝辨槸write-read-write-read錛屽彲浠ョ湅鐪嬩袱縐嶅艦寮忎笅寤惰繜鐨勫樊寮傘?strong>娉ㄦ剰錛屽湪windows涓婃祴璇曚笅闈㈢殑浠g爜錛屽鎴風鍜屾湇鍔″櫒蹇呴』鍒嗗湪涓ゅ彴鏈哄櫒涓婏紝浼間箮winsock瀵筶oopback榪炴帴鐨勫鐞嗕笉涓鏍楓?/strong><br /><br />    鏈嶅姟鍣ㄦ簮鐮侊細<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; "> net.fnil.nagle;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.BufferedReader;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.InputStream;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.InputStreamReader;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.OutputStream;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.net.InetSocketAddress;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.net.ServerSocket;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.net.Socket;<br /><br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Server {<br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) </span><span style="color: #0000FF; ">throws</span><span style="color: #000000; "> Exception {<br />        ServerSocket serverSocket </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> ServerSocket();<br />        serverSocket.bind(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InetSocketAddress(</span><span style="color: #000000; ">8000</span><span style="color: #000000; ">));<br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Server startup at 8000</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />        </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (;;) {<br />            Socket socket </span><span style="color: #000000; ">=</span><span style="color: #000000; "> serverSocket.accept();<br />            InputStream in </span><span style="color: #000000; ">=</span><span style="color: #000000; "> socket.getInputStream();<br />            OutputStream out </span><span style="color: #000000; ">=</span><span style="color: #000000; "> socket.getOutputStream();<br /><br />            </span><span style="color: #0000FF; ">while</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">) {<br />                </span><span style="color: #0000FF; ">try</span><span style="color: #000000; "> {<br />                    BufferedReader reader </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BufferedReader(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InputStreamReader(in));<br />                    String line </span><span style="color: #000000; ">=</span><span style="color: #000000; "> reader.readLine();<br />                    out.write((line </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">\r\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">).getBytes());<br />                }<br />                </span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (Exception e) {<br />                    </span><span style="color: #0000FF; ">break</span><span style="color: #000000; ">;<br />                }<br />            }<br />        }<br />    }<br />}<br /></span></div><br />鏈嶅姟绔粦瀹氬埌鏈湴8000绔彛錛屽茍鐩戝惉榪炴帴錛岃繛涓婃潵鐨勬椂鍊欏氨闃誨璇誨彇涓琛屾暟鎹紝騫跺皢鏁版嵁榪斿洖緇欏鎴風銆?br /><br />瀹㈡埛绔唬鐮侊細<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; "> net.fnil.nagle;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.BufferedReader;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.InputStream;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.InputStreamReader;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.io.OutputStream;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.net.InetSocketAddress;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.net.Socket;<br /><br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> Client {<br /><br />    </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> main(String[] args) </span><span style="color: #0000FF; ">throws</span><span style="color: #000000; "> Exception {<br />        </span><span style="color: #008000; ">//</span><span style="color: #008000; "> 鏄惁鍒嗗紑鍐檋ead鍜宐ody</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">        </span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; "> writeSplit </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />        String host </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">localhost</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (args.length </span><span style="color: #000000; ">>=</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">) {<br />            host </span><span style="color: #000000; ">=</span><span style="color: #000000; "> args[</span><span style="color: #000000; ">0</span><span style="color: #000000; ">];<br />        }<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (args.length </span><span style="color: #000000; ">>=</span><span style="color: #000000; "> </span><span style="color: #000000; ">2</span><span style="color: #000000; ">) {<br />            writeSplit </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Boolean.valueOf(args[</span><span style="color: #000000; ">1</span><span style="color: #000000; ">]);<br />        }<br /><br />        System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">WriteSplit:</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> writeSplit);<br /><br />        Socket socket </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Socket();<br /><br />        socket.connect(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InetSocketAddress(host, </span><span style="color: #000000; ">8000</span><span style="color: #000000; ">));<br />        InputStream in </span><span style="color: #000000; ">=</span><span style="color: #000000; "> socket.getInputStream();<br />        OutputStream out </span><span style="color: #000000; ">=</span><span style="color: #000000; "> socket.getOutputStream();<br /><br />        BufferedReader reader </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> BufferedReader(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InputStreamReader(in));<br /><br />        String head </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">hello </span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />        String body </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; ">world\r\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />        </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; "><</span><span style="color: #000000; "> </span><span style="color: #000000; ">10</span><span style="color: #000000; ">; i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br />            </span><span style="color: #0000FF; ">long</span><span style="color: #000000; "> label </span><span style="color: #000000; ">=</span><span style="color: #000000; "> System.currentTimeMillis();<br />            </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (writeSplit) {<br />                out.write(head.getBytes());<br />                out.write(body.getBytes());<br />            }<br />            </span><span style="color: #0000FF; ">else</span><span style="color: #000000; "> {<br />                out.write((head </span><span style="color: #000000; ">+</span><span style="color: #000000; "> body).getBytes());<br />            }<br />            String line </span><span style="color: #000000; ">=</span><span style="color: #000000; "> reader.readLine();<br />            System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">RTT:</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> (System.currentTimeMillis() </span><span style="color: #000000; ">-</span><span style="color: #000000; "> label) </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">"</span><span style="color: #000000; "> ,receive:</span><span style="color: #000000; ">"</span><span style="color: #000000; "> </span><span style="color: #000000; ">+</span><span style="color: #000000; "> line);<br />        }<br />        in.close();<br />        out.close();<br />        socket.close();<br />    }<br /><br />}<br /></span></div><br /><br />   瀹㈡埛绔氳繃涓涓獁riteSplit鍙橀噺鏉ユ帶鍒舵槸鍚﹀垎寮鍐檋ead鍜宐ody錛屽鏋滀負true錛屽垯鍏堝啓head鍐嶅啓body錛屽惁鍒欏皢head鍔犱笂body涓嬈″啓鍏ャ傚鎴風鐨勯昏緫涔熷緢綆鍗曪紝榪炰笂鏈嶅姟鍣紝鍙戦佷竴琛岋紝絳夊緟搴旂瓟騫舵墦鍗癛TT錛屽驚鐜?0嬈℃渶鍚庡叧闂繛鎺ャ?br /><br />   棣栧厛錛屾垜浠皢writeSplit璁劇疆涓簍rue錛屼篃灝辨槸鍒嗕袱嬈″啓鍏ヤ竴琛岋紝鍦ㄦ垜鏈満嫻嬭瘯鐨勭粨鏋滐紝鎴戠殑鏈哄櫒鏄痷buntu 11.10錛?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">WriteSplit:</span><span style="color: #0000FF; ">true</span><span style="color: #000000; "><br />RTT:</span><span style="color: #000000; ">8</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">39</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">40</span><span style="color: #000000; "> ,receive:hello world<br /></span></div><br />    鍙互鐪嬪埌錛屾瘡嬈¤姹傚埌搴旂瓟鐨勬椂闂撮棿闅旈兘鍦?0ms錛岄櫎浜嗙涓嬈°俵inux鐨刣elayed ack鏄?0ms錛岃屼笉鏄師鏉ヤ互涓虹殑200ms銆傜涓嬈$珛鍗矨CK錛屼技涔庤窡linux鐨剄uickack mode鏈夊叧錛岃繖閲屾垜涓嶆槸鐗瑰埆娓呮錛屾湁姣旇緝娓呮鐨勫悓瀛﹁鎸囨暀銆?br /><br />     鎺ヤ笅鏉ワ紝鎴戜滑榪樻槸灝唚riteSplit璁劇疆涓簍rue錛屼絾鏄鎴風紱佺敤nagle綆楁硶錛屼篃灝辨槸瀹㈡埛绔唬鐮佸湪connect涔嬪墠鍔犱笂涓琛岋細<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">        Socket socket </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> Socket();<br />        socket.setTcpNoDelay(</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">);<br />        socket.connect(</span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InetSocketAddress(host, </span><span style="color: #000000; ">8000</span><span style="color: #000000; ">));</span></div><br />    鍐嶈窇涓嬫祴璇曪細<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">WriteSplit:</span><span style="color: #0000FF; ">true</span><span style="color: #000000; "><br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">1</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br /></span></div><br />   榪欐椂鍊欏氨姝e父澶氫簡錛屽ぇ閮ㄥ垎RTT鏃墮棿閮藉湪1姣浠ヤ笅銆傛灉鐒剁鐢∟agle綆楁硶鍙互瑙e喅寤惰繜闂銆?br />   濡傛灉鎴戜滑涓嶇鐢╪agle綆楁硶錛岃屽皢writeSplit璁劇疆涓篺alse錛屼篃灝辨槸灝唄ead鍜宐ody涓嬈″啓鍏ワ紝鍐嶆榪愯嫻嬭瘯錛堣鐨勫皢setTcpNoDelay榪欒鍒犻櫎錛夛細<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">WriteSplit:</span><span style="color: #0000FF; ">false</span><span style="color: #000000; "><br />RTT:</span><span style="color: #000000; ">7</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">1</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000;"> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br />RTT:</span><span style="color: #000000; ">0</span><span style="color: #000000; "> ,receive:hello world<br /></span></div><br />   緇撴灉璺熺鐢╪agle綆楁硶鐨勬晥鏋滅被浼箋傛棦鐒惰繖鏍鳳紝鎴戜滑榪樻湁浠涔堢悊鐢變竴瀹氳紱佺敤nagle綆楁硶鍛紵閫氳繃鎴戝湪<a >xmemcached</a>鐨勫帇嫻嬩腑鐨勬祴璇曪紝鍚敤nagle綆楁硶鍦ㄥ皬鏁版嵁鐨勫瓨鍙栦笂鐢氳嚦鏈変竴瀹氱殑鏁堢巼浼樺娍錛宮emcached鍗忚鏈韓灝辨槸涓繛緇殑璇鋒眰搴旂瓟鐨勬ā鍨嬨備笂闈㈢殑嫻嬭瘯濡傛灉鍦╳indows涓婅窇錛屼細鍙戠幇RTT鏈澶т細鍦?00ms浠ヤ笂錛屽彲瑙亀insock鐨刣elayed ack瓚呮椂鏄?00ms銆?br /><br />   鏈鍚庝竴涓棶棰橈紝浠涔堟儏鍐典笅鎵嶅簲璇ョ鐢╪agle綆楁硶錛熷綋浣犵殑搴旂敤涓嶆槸榪欑榪炵畫鐨勮姹?#8212;—搴旂瓟妯″瀷錛岃屾槸闇瑕佸疄鏃跺湴鍗曞悜鍙戦佸緢澶氬皬鏁版嵁鐨勬椂鍊欐垨鑰呰姹傛槸鏈夐棿闅旂殑錛屽垯搴旇紱佺敤nagle綆楁硶鏉ユ彁楂樺搷搴旀с備竴涓渶鏄庢樉鏄緥瀛愭槸telnet搴旂敤錛屼綘鎬繪槸甯屾湜鏁插叆涓琛屾暟鎹悗鑳界珛鍗沖彂閫佺粰鏈嶅姟鍣紝鐒跺悗椹笂鐪嬪埌搴旂瓟錛岃屼笉鏄鎴戣榪炵畫鏁插叆寰堝鍛戒護鎴栬呯瓑寰?00ms鎵嶈兘鐪嬪埌搴旂瓟銆?br /><br />   涓婇潰鏄垜瀵筺agle綆楁硶鍜宒elayed ack鐨勭悊瑙e拰嫻嬭瘯錛屾湁閿欒鐨勫湴鏂硅涓嶅悵璧愭暀銆?br /><br />   杞澆璇鋒敞鏄庡嚭澶勶細<a id="Editor_Edit_hlEntryLink" title="view: Nagle綆楁硶鍜孌elayed ACK鐨勪竴涓祴璇? href="../archive/2011/06/30/353441.html" target="_blank">http://www.tkk7.com/killme2008/archive/2011/06/30/353441.html</a><br />   <br />  <img src ="http://www.tkk7.com/killme2008/aggbug/353441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/killme2008/" target="_blank">dennis</a> 2011-06-30 16:01 <a href="http://www.tkk7.com/killme2008/archive/2011/06/30/353441.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Java NIO緙栫▼鐨勬妧宸у拰闄烽槺http://www.tkk7.com/killme2008/archive/2011/06/30/353422.htmldennisdennisThu, 30 Jun 2011 03:07:00 GMThttp://www.tkk7.com/killme2008/archive/2011/06/30/353422.htmlhttp://www.tkk7.com/killme2008/comments/353422.htmlhttp://www.tkk7.com/killme2008/archive/2011/06/30/353422.html#Feedback0http://www.tkk7.com/killme2008/comments/commentRss/353422.htmlhttp://www.tkk7.com/killme2008/services/trackbacks/353422.html 鍘誨勾鍋氱殑鍒嗕韓錛屼竴鐩翠笂浼爏lideshare澶辮觸錛屼粖澶╁張璇曚簡涓嬶紝鎴愬姛浜嗐傝繖涓富棰樹富瑕佷粙緇岼ava NIO緙栫▼鐨勬妧宸у拰闄烽槺錛岃В璇諱簡涓浜汵IO妗嗘灦鐨勬簮鐮侊紝浠ュ強緙栧啓楂樻ц兘NIO緗戠粶妗嗘灦鎵闇瑕佹敞鎰忕殑鎶宸у拰緙洪櫡銆傚叧娉ㄨ繖鏂歸潰鐨勬湅鍙嬪彲浠ョ湅涓涓嬨傚幓騫村啓浜嗙瘒blog鎻愪緵浜唒df鐗堟湰鐨勪笅杞斤紝鐪?a href="http://www.tkk7.com/killme2008/archive/2010/11/22/338420.html">榪欓噷銆?br />


dennis 2011-06-30 11:07 鍙戣〃璇勮
]]>
Unix domain socket鍜宮emcachedhttp://www.tkk7.com/killme2008/archive/2009/10/15/298301.htmldennisdennisWed, 14 Oct 2009 22:12:00 GMThttp://www.tkk7.com/killme2008/archive/2009/10/15/298301.htmlhttp://www.tkk7.com/killme2008/comments/298301.htmlhttp://www.tkk7.com/killme2008/archive/2009/10/15/298301.html#Feedback0http://www.tkk7.com/killme2008/comments/commentRss/298301.htmlhttp://www.tkk7.com/killme2008/services/trackbacks/298301.html 1錛夊湪鍚屼竴涓繪満涓婏紝unix domain socket姣斾竴鑸殑tcp socket蹇笂涓鍊嶏紝鎬ц兘鍥犵礌榪欐槸涓涓富瑕佸師鍥犮?br /> 2錛塽nix domain socket鍙互鍦ㄥ悓涓涓繪満鐨勪笉鍚岃繘紼嬩箣闂翠紶閫掓枃浠舵弿榪扮
3錛夎緝鏂扮殑unix domain socket瀹炵幇鎶婂鎴風殑ID鍜岀粍ID鎻愪緵緇欐湇鍔″櫒錛屽彲浠ヨ鏈嶅姟鍣ㄤ綔瀹夊叏媯鏌ャ?br />
   memcached鐨凢AQ涓篃鎻愬埌涓轟簡瀹夊叏楠岃瘉錛屽彲浠ヨ冭檻璁﹎emcached鐩戝惉unix domain socket銆侻emcached鏀寔榪欎竴鐐癸紝鍙互閫氳繃-s閫夐」鎸囧畾unix domain socket鐨勮礬寰勫悕錛屾敞鎰忥紝涓轟簡鍙Щ妞嶆э紝灝介噺浣跨敤緇濆璺緞錛屽洜涓篜osix鏍囧噯澹扮О緇檜nix domain socket緇戝畾鐩稿璺緞灝嗗鑷翠笉鍙璁$殑鍚庢灉錛屾垜鍦╨inux鐨勬祴璇曟槸鍙互浣跨敤鐩稿璺緞銆傚亣璁炬垜灝唌emcached緇戝畾鍒?home/dennis/memcached錛屽彲浠ヨ繖鏍峰惎鍔╩emcached:

memcached -s /home/dennis/memcached


绔彛鍛紵娌℃湁绔彛浜嗭紝/home/dennis/memcached榪欎釜鏂囦歡浣犲彲浠ョ悊瑙f垚FIFO鐨勭閬擄紝unix domain socket鐨剆erver/client閫氳繃榪欎釜綆¢亾閫氳銆?br />
   libmemcached鏀寔閫氳繃unix domain socket鏉ヨ闂甿emcached錛屽熀浜巐ibmemcached瀹炵幇鐨刢lient搴旇閮藉彲浠ヤ嬌鐢ㄨ繖涓鍔熻兘銆傜洰鍓嶆潵鐪嬶紝java騫沖彴鐢變簬涓嶆敮鎸佸鉤鍙扮浉鍏崇殑unix domain socket錛屽洜姝ゆ棤娉曚韓鍙梞emcached鐨勮繖涓鐗規с?br />
   涓嶈繃鏈変竴涓紑婧愰」鐩氳繃jni鏀寔瀹炵幇浜唘nix domain socket錛岃繖涓」鐩О涓?a title="juds" >juds銆傛牳蹇冪被灝變笁涓紝浣跨敤闈炲父綆鍗曘備笅杞芥枃浠跺悗錛岃В鍘嬬緝錛宮ake & make install鍗沖彲銆傛敞鎰忥紝Makefile涓啓姝諱簡JAVA_HOME錛屾墜宸ヤ慨鏀瑰嵆鍙傜湅涓涓緥瀛愶紝緇忓吀鐨凾ime server:
package com.google.code.juds.test;

import java.io.IOException;

import com.google.code.juds.*;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TimeServer {
    
public static void main(String[] args) {
        
try {
            UnixDomainSocketServer server 
= new UnixDomainSocketServer(
                    
"/home/dennis/time", UnixDomainSocket.SOCK_STREAM);
            OutputStream output 
= server.getOutputStream();
             Date date 
= new Date();
             DateFormat dateFormat 
= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            output.write(dateFormat.format(date).getBytes());
        } 
catch (IOException e) {
                    e.printStackTrace();
        }

    }

}

    閫氳繃UnixDomainSocketServer鍒涘緩server錛屾寚瀹氱被鍨嬩負SOCK_STREAM錛宩uds涔熸敮鎸乁DP綾誨瀷銆俢lient鐨勪嬌鐢ㄥ涓?
        byte[] b = new byte[128];
       
UnixDomainSocketClient socket = new UnixDomainSocketClient("/home/dennis/time",
                UnixDomainSocket.SOCK_STREAM);
        InputStream in 
= socket.getInputStream();
        in.read(b);
        System.out.println(
"Text received: \"" + new String(b) + "\"");
        socket.close();
    鏄劇劧錛宩uds榪樺彧鏀寔闃誨IO錛岃冭檻鍙繘涓姝ヤ嬌鐢╯elect銆乸oll鏉ユ墿灞曞疄鐜伴潪闃誨IO銆?br />
    鏈鍚庝竴涓緥瀛愶紝閫氳繃juds璁塊棶memcached鐨剈nix domain socket錛岀畝鍗曠殑version鍗忚璋冪敤錛?br />
byte[] b = new byte[128];
        UnixDomainSocketClient socket 
= new UnixDomainSocketClient("/home/dennis/memcached",
                UnixDomainSocket.SOCK_STREAM);
        OutputStream out 
= socket.getOutputStream();
        String text 
= "version\r\n";
        out.write(text.getBytes());
        InputStream in 
= socket.getInputStream();
        in.read(b);
        System.out.println(
"Text received: \"" + new String(b) + "\"");
        socket.close();
   杈撳嚭
     Text received: "VERSION 1.4.1"


dennis 2009-10-15 06:12 鍙戣〃璇勮
]]>
ACE_Select_Reactor鍦╳in32涓婄紪璇戠殑灝忛棶棰?/title><link>http://www.tkk7.com/killme2008/archive/2009/02/03/253089.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Tue, 03 Feb 2009 07:40:00 GMT</pubDate><guid>http://www.tkk7.com/killme2008/archive/2009/02/03/253089.html</guid><wfw:comment>http://www.tkk7.com/killme2008/comments/253089.html</wfw:comment><comments>http://www.tkk7.com/killme2008/archive/2009/02/03/253089.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/killme2008/comments/commentRss/253089.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/killme2008/services/trackbacks/253089.html</trackback:ping><description><![CDATA[    ACE_Reactor鍦╳indows涓婇粯璁や笉鏄嬌鐢ˋCE_Select_Reactor錛岃屾槸ACE_WFMO_Reactor錛堝皝瑁呬簡WaitForMultipleObjects鍜學SAEventSelect錛夈傚鏋滄兂閫夋嫨ACE_Select_Reactor錛屽錛?br /> <br /> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;">ACE_Select_Reactor select_reactor;<br /> ACE_Reactor reactor (</span><span style="color: #000000;">&</span><span style="color: #000000;">select_reactor);</span></div> <br />     閭d箞VC闇瑕佸惎鐢?GR緙栬瘧閫夐」錛屽叿浣撳仛娉曞氨鏄湪欏圭洰灞炴/c++鐨勮璦涓鏍忎腑鍚敤RTTI淇℃伅鍗沖彲銆傚湪閫夋嫨浜咥CE_Select_Reactor涔嬪悗錛屽惎鍔ㄨ繘紼嬪悗鍦≒rocessExplorer鏋滅劧鍙互鐪嬪埌榪涚▼鐨凾CP灞炴т腑寤虹珛浜嗕袱涓簰榪炵殑TCP榪炴帴錛岀敤浠otify鐨勫疄鐜般?br /> <br /> <img src="http://www.tkk7.com/images/blogjava_net/killme2008/select_reactor.jpg" alt="" border="0" /><br /> <br /> <br /> <br /><img src ="http://www.tkk7.com/killme2008/aggbug/253089.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/killme2008/" target="_blank">dennis</a> 2009-02-03 15:40 <a href="http://www.tkk7.com/killme2008/archive/2009/02/03/253089.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ACE Reactor鐨凟cho Serverhttp://www.tkk7.com/killme2008/archive/2009/02/03/253057.htmldennisdennisTue, 03 Feb 2009 03:59:00 GMThttp://www.tkk7.com/killme2008/archive/2009/02/03/253057.htmlhttp://www.tkk7.com/killme2008/comments/253057.htmlhttp://www.tkk7.com/killme2008/archive/2009/02/03/253057.html#Feedback1http://www.tkk7.com/killme2008/comments/commentRss/253057.htmlhttp://www.tkk7.com/killme2008/services/trackbacks/253057.html
  1 /************************************************************************ 
  2 * @file: echo.cpp                                                    
  3 * @author: dennis
  4 * @revise: dennis <killme2008@gmail.com> http://www.tkk7.com/killme2008
  5 *          鐩稿瀹屾暣鐨別cho server錛屽彲浠ユ帴鍙楀涓鎴風榪炴帴錛屽茍涓斿彲浠ラ氳繃閿叆quit姝e父鍏抽棴
  6 
  7 ************************************************************************/
  8 
  9 #ifdef _DEBUG
 10 #pragma comment (lib,"aced.lib")
 11 #else
 12 #pragma comment (lib,"ace.lib")
 13 #endif
 14 
 15 #include "ace/Reactor.h"
 16 #include "ace/SOCK_Acceptor.h"
 17 #include "ace/os.h"
 18 #include "ace/Log_Msg.h"
 19 #include "ace/inet_addr.h"
 20 #include "ace/Thread_Manager.h"
 21 #include<iostream>
 22 #include<string>
 23 
 24 #define PORT_NO 8080
 25 typedef ACE_SOCK_Acceptor Acceptor;
 26 //forward declaration
 27 class Echo_Handler;
 28 
 29 class Echo_Handler:public ACE_Event_Handler
 30 {
 31 public:
 32     //construcor
 33     Echo_Handler()
 34     {
 35     }
 36     virtual ~Echo_Handler()
 37     {
 38     }
 39     //Called back to handle any input received
 40     int handle_input(ACE_HANDLE)
 41     {
 42         //receive the data
 43         ssize_t recvBytes = peer().recv(data,12);
 44         if(recvBytes <= 0)
 45         {
 46             ACE_DEBUG((LM_DEBUG,"%s\n","瀹㈡埛绔柇寮榪炴帴"));
 47             return -1;
 48         }
 49         data[recvBytes] = 0;
 50 
 51         ACE_DEBUG((LM_DEBUG,"%s\n",data));
 52 
 53 
 54         if(ACE_OS::strcmp(data,"q"== 0)
 55         {
 56             ACE_DEBUG((LM_DEBUG,"%s\n","瀹㈡埛绔鍑?/span>"));
 57             peer().close();
 58             return -1;
 59         }
 60         peer().send_n(data,recvBytes);
 61         // do something with the input received.
 62         // 
 63         // keep yourself registerd with the reator
 64         return 0;
 65     }
 66 
 67     int handle_close(ACE_HANDLE h,ACE_Reactor_Mask m)
 68     {
 69         delete this;
 70         return  0;
 71     }
 72 
 73     //Used by the reactor to determine the underlying handle
 74     ACE_HANDLE get_handle()  const 
 75     {
 76         return this->peer_.get_handle();
 77     }
 78 
 79     //Returns a reference to the underlying stream.
 80     ACE_SOCK_Stream& peer()
 81     {
 82         return this->peer_;
 83     }
 84 
 85 private:
 86     ACE_SOCK_Stream peer_;
 87     char data [12];
 88 };
 89 
 90 class Echo_Accept_Handler:public ACE_Event_Handler
 91 {
 92 public:
 93     //Constructor
 94     Echo_Accept_Handler(ACE_Addr &addr)
 95     {
 96         this->open(addr);
 97     }
 98     virtual ~Echo_Accept_Handler(){}
 99     //Open the peer_acceptor so it starts to "listen"
100     //for incoming clients
101     int open(ACE_Addr &addr)
102     {
103         if(peer_acceptor.open(addr)==-1)
104             ACE_ERROR_RETURN((LM_ERROR,"鍚姩鏈嶅姟鍣ㄩ敊璇痋n"),1);
105         return 0;
106     }
107 
108     //Overload the handle input method
109     int handle_input(ACE_HANDLE handle)
110     {
111         //Client has requested connection to server.
112         //Create a handler to handle the connection
113         Echo_Handler *eh;
114         ACE_NEW_RETURN(eh,Echo_Handler,-1);
115         ACE_INET_Addr cliaddr;
116         //Accept the connection "into" the Event Handler
117         if(this->peer_acceptor.accept(eh->peer(),//stream
118             &cliaddr,//remote address
119             0,//timeout
120             1== -1)//restart if interrupted
121             ACE_DEBUG((LM_ERROR,"Error in connection \n"));
122 
123         ACE_DEBUG((LM_DEBUG,"榪炴帴宸茬粡寤虹珛,鏉ヨ嚜%s\n",cliaddr.get_host_addr()));
124 
125         //Register the input event handler for reading 
126         ACE_Reactor::instance()->register_handler(eh,ACE_Event_Handler::READ_MASK);
127         const char* msg = "鎸塹閿嬌鏈嶅姟瀹夊叏閫鍑篭r\n";
128         eh->peer().send_n(msg,strlen(msg)+1);
129         return 0;
130     }
131 
132     //Used by the reactor to determine the underlying handle
133     ACE_HANDLE get_handle(voidconst
134     {
135         return this->peer_acceptor.get_handle();
136     }
137     int handle_close(ACE_HANDLE h,ACE_Reactor_Mask m){
138         peer_acceptor.close();
139         delete this;
140         return 0;
141     }
142 
143 private:
144     Acceptor peer_acceptor;
145 };
146 class Quit_Handler:public ACE_Event_Handler
147 {
148 public:
149     Quit_Handler(ACE_Reactor* r):ACE_Event_Handler(r){}
150     virtual int handle_exception(ACE_HANDLE)
151     {
152         ACE_DEBUG((LM_DEBUG,"鍋滄鏈嶅姟鍣ㄤ腑\n"));
153         reactor()->end_reactor_event_loop();
154         return -1;
155     }
156     int handle_close(ACE_HANDLE h,ACE_Reactor_Mask m)
157     {
158         delete this;
159         return 0;
160     }
161     virtual ~Quit_Handler(){}
162 };
163 static ACE_THR_FUNC_RETURN run_events (void *arg);
164 static ACE_THR_FUNC_RETURN controller (void *arg);
165 int ACE_TMAIN(int argc,char *argv[])
166 {
167 
168     ACE_Reactor* reactor=ACE_Reactor::instance();
169     if(ACE_Thread_Manager::instance()->spawn(run_events,reactor,THR_DETACHED | THR_SCOPE_SYSTEM)==-1)
170         return 1;
171     if(ACE_Thread_Manager::instance()->spawn(controller,reactor,THR_DETACHED | THR_SCOPE_SYSTEM)==-1)
172         return 1;
173     return ACE_Thread_Manager::instance()->wait();
174 }
175 
176 static ACE_THR_FUNC_RETURN run_events (void *arg)
177 {
178     ACE_Reactor* reactor=ACE_static_cast(ACE_Reactor*,arg);
179     ACE_INET_Addr addr(PORT_NO);
180 
181     Echo_Accept_Handler *eh=0;
182     ACE_NEW_RETURN(eh,Echo_Accept_Handler(addr),1);
183 
184     ACE_Reactor::instance()->owner(ACE_OS::thr_self());
185     reactor->register_handler(eh,ACE_Event_Handler::ACCEPT_MASK);
186     ACE_Reactor::instance()->run_reactor_event_loop();
187     return 0;
188 }
189 static ACE_THR_FUNC_RETURN controller (void *arg)
190 {
191     ACE_Reactor* reactor=ACE_static_cast(ACE_Reactor*,arg);
192     Quit_Handler *quit_handler=0;
193     ACE_NEW_RETURN(quit_handler,Quit_Handler(reactor),1);
194     for(;;)
195     {
196         std::string line;
197         std::getline(std::cin,line,'\n');
198         if(line=="quit"){
199             ACE_DEBUG((LM_DEBUG,"璇鋒眰鍋滄鏈嶅姟鍣╘n"));
200             reactor->notify(quit_handler);
201             break;
202         }
203     }
204     return 0;  
205 }
206 




dennis 2009-02-03 11:59 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 老司机午夜在线视频免费观| 亚洲视频国产精品| 亚洲AV无码AV日韩AV网站| 在线视频免费观看爽爽爽| 久久亚洲私人国产精品| 精品一区二区三区免费| 亚洲精品无码永久中文字幕| a级午夜毛片免费一区二区| 国产亚洲大尺度无码无码专线 | eeuss在线兵区免费观看| 国产精品jizz在线观看免费| 亚洲精品自偷自拍无码| 在线观看免费国产视频| 国产AV无码专区亚洲AV麻豆丫| 国产午夜免费秋霞影院| 特级一级毛片免费看| 日韩精品成人亚洲专区| 国产高清视频免费在线观看| 亚洲最大AV网站在线观看| 在线观看免费黄色网址| 亚洲av综合avav中文| 毛片免费全部播放无码| 亚洲一日韩欧美中文字幕在线| 国产精品免费视频一区| 丁香花在线观看免费观看图片| 日本红怡院亚洲红怡院最新| 222www免费视频| 亚洲大码熟女在线观看| 亚洲人成电影在线播放| 日韩免费的视频在线观看香蕉| 亚洲人6666成人观看| 免费大学生国产在线观看p| 玖玖在线免费视频| 成人亚洲国产va天堂| 亚洲 无码 在线 专区| 无码国产精品一区二区免费式芒果| 亚洲国产精品久久久久秋霞影院| 男女交性永久免费视频播放| jizz免费观看| 亚洲影视自拍揄拍愉拍| 毛茸茸bbw亚洲人|