<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8">
<meta name="generator" content="pdf2htmlEX">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<link rel="stylesheet" href="https://static.pudn.com/base/css/base.min.css">
<link rel="stylesheet" href="https://static.pudn.com/base/css/fancy.min.css">
<link rel="stylesheet" href="https://static.pudn.com/prod/directory_preview_static/62512c786caf5961923b5587/raw.css">
<script src="https://static.pudn.com/base/js/compatibility.min.js"></script>
<script src="https://static.pudn.com/base/js/pdf2htmlEX.min.js"></script>
<script>
try{
pdf2htmlEX.defaultViewer = new pdf2htmlEX.Viewer({});
}catch(e){}
</script>
<title></title>
</head>
<body>
<div id="sidebar" style="display: none">
<div id="outline">
</div>
</div>
<div id="pf1" class="pf w0 h0" data-page-no="1"><div class="pc pc1 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62512c786caf5961923b5587/bg1.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java NIO<span class="_ _0"> </span><span class="ff2 sc1">框架<span class="_ _1"> </span></span>Netty<span class="_ _0"> </span><span class="ff2 sc1">教程(一)</span> <span class="_ _0"> </span><span class="ff3">–</span> Hello<span class="_ _2"></span> Netty<span class="ff4 fc1"> </span></div><div class="t m0 x1 h3 y2 ff2 fs1 fc1 sc0 ls0 ws0">先啰嗦两句,如果你还<span class="_ _3"></span>不知道<span class="_ _1"> </span><span class="ff5">Ne<span class="_ _3"></span>tty<span class="_"> </span></span>是做什么的能做什<span class="_ _3"></span>么。那可以先简单的<span class="_ _3"></span>搜索了解一下。我<span class="_ _3"></span>只能说<span class="_ _1"> </span><span class="ff5">Ne<span class="_ _3"></span>tty<span class="_"> </span></span>是一个<span class="_ _1"> </span><span class="ff5">NIO<span class="_"> </span></span>的框架<span class="_ _3"></span>,可以用</div><div class="t m0 x1 h3 y3 ff2 fs1 fc1 sc0 ls0 ws0">于开发分布式的<span class="_ _0"> </span><span class="ff5">Java<span class="_ _0"> </span></span>程序。具<span class="_ _3"></span>体能做什么,各位<span class="_ _3"></span>可以尽量发挥想象。<span class="_ _3"></span>技术,是服务于人<span class="_ _3"></span>而不是局限住人的。<span class="_ _3"></span><span class="ff6"> </span></div><div class="t m0 x1 h4 y4 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x1 h3 y5 ff5 fs1 fc1 sc0 ls0 ws0">Netty<span class="_ _0"> </span><span class="ff2">的简介和下载可参考<span class="_ _3"></span>:《<span class="fc0">开源<span class="_ _0"> </span><span class="ff5">Java<span class="_"> </span></span>高性能<span class="_ _4"> </span><span class="ff5 ls1">NIO<span class="_ _4"> </span></span>框架推<span class="_ _3"></span>荐<span class="ff5"> <span class="_ _5"> </span><span class="ff7">–</span> Netty</span></span>》。<span class="_ _3"></span>注意,此时的最新<span class="_ _3"></span>版已经为<span class="_ _0"> </span></span>3.5.2.Final<span class="ff2">。<span class="_ _3"></span></span> </div><div class="t m0 x1 h4 y6 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x1 h3 y7 ff2 fs1 fc1 sc0 ls0 ws0">如果你已经万事具备,那么我们先从一<span class="_ _3"></span>段代码开始。<span class="_ _2"></span>程序员们习惯的<span class="_ _3"></span>上手第一步,自然是<span class="ff5">"Hello <span class="_ _2"></span>world"<span class="ff2">,不过<span class="_ _4"> </span></span>Netty<span class="_"> </span><span class="ff2">官网的例子却偏偏抛</span></span></div><div class="t m0 x1 h3 y8 ff2 fs1 fc1 sc0 ls0 ws0">弃了<span class="ff5">"Hello world"</span>。那<span class="_ _3"></span>我们就自己写一<span class="_ _3"></span>个最简单的<span class="ff5">"He<span class="_ _3"></span>llo world"</span>的例子,作<span class="_ _3"></span>为上手。<span class="ff5"> </span></div><div class="t m0 x1 h4 y9 ff5 fs1 fc2 sc0 ls0 ws0">?<span class="fc1"> </span></div><div class="c x1 ya w2 h5"><div class="t m0 x2 h6 yb ff8 fs2 fc3 sc0 ls0 ws0">HelloServer.java </div></div><div class="c x1 yc w3 h7"><div class="t m0 x0 h6 yd ff8 fs2 fc3 sc0 ls2 ws0">01<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 ye ff8 fs2 fc3 sc0 ls2 ws0">02<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 yf ff8 fs2 fc3 sc0 ls2 ws0">03<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y10 ff8 fs2 fc3 sc0 ls2 ws0">04<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y11 ff8 fs2 fc3 sc0 ls2 ws0">05<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y12 ff8 fs2 fc3 sc0 ls2 ws0">06<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y13 ff8 fs2 fc3 sc0 ls2 ws0">07<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y14 ff8 fs2 fc3 sc0 ls2 ws0">08<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y15 ff8 fs2 fc3 sc0 ls2 ws0">09<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y16 ff8 fs2 fc3 sc0 ls2 ws0">10<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y17 ff8 fs2 fc3 sc0 ls2 ws0">11<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y18 ff8 fs2 fc3 sc0 ls2 ws0">12<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y19 ff8 fs2 fc3 sc0 ls2 ws0">13<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1a ff8 fs2 fc3 sc0 ls2 ws0">14<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1b ff8 fs2 fc3 sc0 ls2 ws0">15<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1c ff8 fs2 fc3 sc0 ls2 ws0">16<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1d ff8 fs2 fc3 sc0 ls2 ws0">17<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1e ff8 fs2 fc3 sc0 ls2 ws0">18<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1f ff8 fs2 fc3 sc0 ls2 ws0">19<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y20 ff8 fs2 fc3 sc0 ls2 ws0">20<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y21 ff8 fs2 fc3 sc0 ls2 ws0">21<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y22 ff8 fs2 fc3 sc0 ls2 ws0">22<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y23 ff8 fs2 fc3 sc0 ls2 ws0">23<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y24 ff8 fs2 fc3 sc0 ls2 ws0">24<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y25 ff8 fs2 fc3 sc0 ls2 ws0">25<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y26 ff8 fs2 fc3 sc0 ls2 ws0">26<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y27 ff8 fs2 fc3 sc0 ls2 ws0">27<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y28 ff8 fs2 fc3 sc0 ls2 ws0">28<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y29 ff8 fs2 fc3 sc0 ls2 ws0">29<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2a ff8 fs2 fc3 sc0 ls2 ws0">30<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2b ff8 fs2 fc3 sc0 ls2 ws0">31<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2c ff8 fs2 fc3 sc0 ls2 ws0">32<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2d ff8 fs2 fc3 sc0 ls2 ws0">33<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls2 ws0">34<span class="ls0"><span class="fc4 sc0"> </span></span></div></div><div class="c x3 yc w4 h7"><div class="t m0 x0 h6 yd ff8 fs2 fc3 sc0 ls2 ws0">/**<span class="ls0"> </span></div><div class="t m0 x0 h6 ye ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* Netty <span class="ff2">服务端代码</span> </div><div class="t m0 x0 h6 yf ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span><span class="ls2">* </span> </div><div class="t m0 x0 h6 y10 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* @author lihzh </div><div class="t m0 x0 h6 y11 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* @alia OneCoder </div><div class="t m0 x0 h6 y12 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* @blog <span class="fc2">http://www.coderli.com</span> </div><div class="t m0 x0 h6 y13 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span><span class="ls2">*/</span> </div><div class="t m0 x0 h6 y14 ff8 fs2 fc3 sc0 ls0 ws0">public class HelloServer { </div><div class="t m0 x0 h6 y15 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div><div class="t m0 x0 h6 y16 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>public static void main(String args[]) { </div><div class="t m0 x0 h6 y17 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>// Server<span class="_ _1"> </span><span class="ff2">服务启动器</span> </div><div class="t m0 x0 h6 y18 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>ServerBootstrap bootstrap = new ServerBootstrap( </div><div class="t m0 x0 h6 y19 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">new</span> NioServerSocketChannelFactory( </div><div class="t m0 x0 h6 y1a ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>Executors.newCachedThreadPool(), </div><div class="t m0 x0 h6 y1b ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>Executors.newCachedThreadPool()));<span class="fc4 sc0"> </span></div><div class="t m0 x0 h6 y1c ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">// </span><span class="ff2">设置一个处理客户端消息和各种消息事件的类</span>(Handler) </div><div class="t m0 x0 h6 y1d ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>bootstrap </div><div class="t m0 x0 h6 y1e ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>.setPipelineFactory(new ChannelPipelineFactory() {<span class="fc4 sc0"> </span></div><div class="t m0 x0 h6 y1f ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>@Override </div><div class="t m0 x0 h6 y20 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>public ChannelPipeline getPipeline() </div><div class="t m0 x0 h6 y21 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>throws Exception { </div><div class="t m0 x0 h6 y22 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>return Channels </div><div class="t m0 x0 h6 y23 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>.pipeline(new </div><div class="t m0 x0 h6 y24 ff8 fs2 fc3 sc0 ls0 ws0">HelloServerHandler()); </div><div class="t m0 x0 h6 y25 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 y26 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">});</span> </div><div class="t m0 x0 h6 y27 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">// <span class="ff2 ls3">开放<span class="_ _6"> </span></span></span>8000<span class="_ _1"> </span><span class="ff2">端口供客户端访问。</span> </div><div class="t m0 x0 h6 y28 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>bootstrap.bind(new InetSocketAddress(8000)); </div><div class="t m0 x0 h6 y29 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 y2a ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div><div class="t m0 x0 h6 y2b ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>private static class HelloServerHandler extends </div><div class="t m0 x0 h6 y2c ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>SimpleChannelHandler { </div><div class="t m0 x0 h6 y2d ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">/**</span> </div></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
</body>
</html>
<div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62512c786caf5961923b5587/bg2.jpg"><div class="c x1 y2e w3 h8"><div class="t m0 x0 h6 y2f ff8 fs2 fc3 sc0 ls2 ws0">35<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y30 ff8 fs2 fc3 sc0 ls2 ws0">36<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y31 ff8 fs2 fc3 sc0 ls2 ws0">37<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y32 ff8 fs2 fc3 sc0 ls2 ws0">38<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y33 ff8 fs2 fc3 sc0 ls2 ws0">39<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y34 ff8 fs2 fc3 sc0 ls2 ws0">40<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y35 ff8 fs2 fc3 sc0 ls2 ws0">41<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y36 ff8 fs2 fc3 sc0 ls2 ws0">42<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y37 ff8 fs2 fc3 sc0 ls2 ws0">43<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y38 ff8 fs2 fc3 sc0 ls2 ws0">44<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y39 ff8 fs2 fc3 sc0 ls2 ws0">45<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y3a ff8 fs2 fc3 sc0 ls2 ws0">46<span class="ls0"><span class="fc4 sc0"> </span></span></div></div><div class="c x3 y2e w4 h8"><div class="t m0 x0 h6 y2f ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">* </span><span class="ff2">当有客户端绑定到服务端的时候触发,<span class="_ _7"></span>打印<span class="ff8">"Hello <span class="_ _7"></span>world, <span class="_ _7"></span>I<span class="_ _3"></span>'m <span class="_ _7"></span>server."<span class="fc4 sc0"> </span></span></span></div><div class="t m0 x0 h6 y30 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">* </span> </div><div class="t m0 x0 h6 y31 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>* @alia OneCoder </div><div class="t m0 x0 h6 y32 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>* @author lihzh </div><div class="t m0 x0 h6 y33 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">*/</span> </div><div class="t m0 x0 h6 y34 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>@Override </div><div class="t m0 x0 h6 y35 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>public void channelConnected( </div><div class="t m0 x0 h6 y36 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>ChannelHandlerContext ctx, </div><div class="t m0 x0 h6 y37 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>ChannelStateEvent e) { </div><div class="t m0 x0 h6 y38 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>System.out.println("Hello world, I'm server.");<span class="_ _3"></span> </div><div class="t m0 x0 h6 y39 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 y3a ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls0 ws0">} </div></div><div class="t m0 x1 h4 y3b ff6 fs1 fc2 sc0 ls0 ws0">?<span class="fc1"> </span></div><div class="c x1 y3c w2 h5"><div class="t m0 x2 h6 yb ff8 fs2 fc3 sc0 ls0 ws0">HelloClient.java </div></div><div class="c x1 yc w3 h9"><div class="t m0 x0 h6 y12 ff8 fs2 fc3 sc0 ls2 ws0">01<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y13 ff8 fs2 fc3 sc0 ls2 ws0">02<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y14 ff8 fs2 fc3 sc0 ls2 ws0">03<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y15 ff8 fs2 fc3 sc0 ls2 ws0">04<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y16 ff8 fs2 fc3 sc0 ls2 ws0">05<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y17 ff8 fs2 fc3 sc0 ls2 ws0">06<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y18 ff8 fs2 fc3 sc0 ls2 ws0">07<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y19 ff8 fs2 fc3 sc0 ls2 ws0">08<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1a ff8 fs2 fc3 sc0 ls2 ws0">09<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1b ff8 fs2 fc3 sc0 ls2 ws0">10<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1c ff8 fs2 fc3 sc0 ls2 ws0">11<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1d ff8 fs2 fc3 sc0 ls2 ws0">12<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1e ff8 fs2 fc3 sc0 ls2 ws0">13<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y1f ff8 fs2 fc3 sc0 ls2 ws0">14<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y20 ff8 fs2 fc3 sc0 ls2 ws0">15<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y21 ff8 fs2 fc3 sc0 ls2 ws0">16<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y22 ff8 fs2 fc3 sc0 ls2 ws0">17<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y23 ff8 fs2 fc3 sc0 ls2 ws0">18<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y24 ff8 fs2 fc3 sc0 ls2 ws0">19<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y25 ff8 fs2 fc3 sc0 ls2 ws0">20<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y26 ff8 fs2 fc3 sc0 ls2 ws0">21<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y27 ff8 fs2 fc3 sc0 ls2 ws0">22<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y28 ff8 fs2 fc3 sc0 ls2 ws0">23<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y29 ff8 fs2 fc3 sc0 ls2 ws0">24<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2a ff8 fs2 fc3 sc0 ls2 ws0">25<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2b ff8 fs2 fc3 sc0 ls2 ws0">26<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2c ff8 fs2 fc3 sc0 ls2 ws0">27<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y2d ff8 fs2 fc3 sc0 ls2 ws0">28<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls2 ws0">29<span class="ls0"><span class="fc4 sc0"> </span></span></div></div><div class="c x3 yc w4 h9"><div class="t m0 x0 h6 y12 ff8 fs2 fc3 sc0 ls2 ws0">/**<span class="ls0"> </span></div><div class="t m0 x0 h6 y13 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* Netty <span class="ff2">客户端代码</span> </div><div class="t m0 x0 h6 y14 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span><span class="ls2">* </span> </div><div class="t m0 x0 h6 y15 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* @author lihzh </div><div class="t m0 x0 h6 y16 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* @alia OneCoder </div><div class="t m0 x0 h6 y17 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span>* @blog <span class="fc2">http://www.coderli.com</span> </div><div class="t m0 x0 h6 y18 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span><span class="ls2">*/</span> </div><div class="t m0 x0 h6 y19 ff8 fs2 fc3 sc0 ls0 ws0">public class HelloClient { </div><div class="t m0 x0 h6 y1a ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div><div class="t m0 x0 h6 y1b ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>public static void main(String args[]) { </div><div class="t m0 x0 h6 y1c ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>// Client<span class="_ _1"> </span><span class="ff2">服务启动器</span> </div><div class="t m0 x0 h6 y1d ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>ClientBootstrap bootstrap = new ClientBootstrap( </div><div class="t m0 x0 h6 y1e ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">new</span> NioClientSocketChannelFactory( </div><div class="t m0 x0 h6 y1f ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>Executors.newCachedThreadPool(), </div><div class="t m0 x0 h6 y20 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>Executors.newCachedThreadPool()));<span class="fc4 sc0"> </span></div><div class="t m0 x0 h6 y21 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">// </span><span class="ff2">设置一个处理服务端消息和各种消息事件的类</span>(Handler) </div><div class="t m0 x0 h6 y22 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>bootstrap.setPipelineFactory(new Channel<span class="_ _3"></span>PipelineFactory() { </div><div class="t m0 x0 h6 y23 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>@Override </div><div class="t m0 x0 h6 y24 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>public ChannelPipeline getPipeline() throws <span class="_ _3"></span>Exception { </div><div class="t m0 x0 h6 y25 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>return <span class="_ _7"></span>Channels.pipeline(new<span class="_ _3"></span> <span class="_ _7"></span>HelloClientHandler());<span class="fc4 sc0"> </span></div><div class="t m0 x0 h6 y26 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 y27 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">});</span> </div><div class="t m0 x0 h6 y28 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">// </span><span class="ff2">连接到本地的<span class="_ _1"> </span></span>8000<span class="_ _6"> </span><span class="ff2">端口的服务端</span> </div><div class="t m0 x0 h6 y29 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>bootstrap.connect(new InetSocketAddress( </div><div class="t m0 x0 h6 y2a ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>"127.0.0.1", 8000)); </div><div class="t m0 x0 h6 y2b ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 y2c ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div><div class="t m0 x0 h6 y2d ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>private static class HelloClientHandler extends <span class="_ _3"></span>SimpleChannelHandler { </div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
<div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62512c786caf5961923b5587/bg3.jpg"><div class="c x1 y3d w3 ha"><div class="t m0 x0 h6 y3e ff8 fs2 fc3 sc0 ls2 ws0">30<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y3f ff8 fs2 fc3 sc0 ls2 ws0">31<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y30 ff8 fs2 fc3 sc0 ls2 ws0">32<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y31 ff8 fs2 fc3 sc0 ls2 ws0">33<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y32 ff8 fs2 fc3 sc0 ls2 ws0">34<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y33 ff8 fs2 fc3 sc0 ls2 ws0">35<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y34 ff8 fs2 fc3 sc0 ls2 ws0">36<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y35 ff8 fs2 fc3 sc0 ls2 ws0">37<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y36 ff8 fs2 fc3 sc0 ls2 ws0">38<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y37 ff8 fs2 fc3 sc0 ls2 ws0">39<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y38 ff8 fs2 fc3 sc0 ls2 ws0">40<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y39 ff8 fs2 fc3 sc0 ls2 ws0">41<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 y40 ff8 fs2 fc3 sc0 ls2 ws0">42<span class="ls0"><span class="fc4 sc0"> </span></span></div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls2 ws0">43<span class="ls0"><span class="fc4 sc0"> </span></span></div></div><div class="c x3 y3d w4 ha"><div class="t m0 x0 h6 y3e ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> </div><div class="t m0 x0 h6 y3f ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">/**</span> </div><div class="t m0 x0 h6 y30 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">* </span><span class="ff2">当绑定到服务端的时候触发,打印</span>"Hello world, I'm client." </div><div class="t m0 x0 h6 y31 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">* </span> </div><div class="t m0 x0 h6 y32 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>* @alia OneCoder </div><div class="t m0 x0 h6 y33 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>* @author lihzh </div><div class="t m0 x0 h6 y34 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span><span class="ls2">*/</span> </div><div class="t m0 x0 h6 y35 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>@Override </div><div class="t m0 x0 h6 y36 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>public void channelConnected(ChannelHandlerContext ctx,<span class="_ _3"></span> </div><div class="t m0 x0 h6 y37 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>ChannelStateEvent e) { </div><div class="t m0 x0 h6 y38 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>System.out.println("Hello world, I'm client.");<span class="_ _3"></span> </div><div class="t m0 x0 h6 y39 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 y40 ff8 fs2 fc3 sc0 ls0 ws0"> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span> <span class="_"> </span>} </div><div class="t m0 x0 h6 yb ff8 fs2 fc3 sc0 ls0 ws0">} </div></div><div class="t m0 x1 h3 y41 ff2 fs1 fc1 sc0 ls0 ws0">既然是分布式的,自然<span class="_ _3"></span>要分多个服务。<span class="_ _3"></span><span class="ff5">Netty<span class="_ _0"> </span></span>中,需要区分<span class="_ _0"> </span><span class="ff5">Serve<span class="_ _3"></span>r<span class="_ _4"> </span></span>和<span class="_ _0"> </span><span class="ff5">Client<span class="_"> </span></span>服务。所有的<span class="_ _4"> </span><span class="ff5">C<span class="_ _3"></span>lient<span class="_ _0"> </span></span>都是绑定在<span class="_ _0"> </span><span class="ff5">Server<span class="_"> </span></span>上的,他们之间是不</div><div class="t m0 x1 h3 y42 ff2 fs1 fc1 sc0 ls0 ws0">能通过<span class="_ _4"> </span><span class="ff5">N<span class="_ _3"></span>etty<span class="_ _4"> </span></span>直<span class="_ _3"></span>接通信的。<span class="_ _8"></span>(自己采用<span class="_ _3"></span>的其他手段,<span class="_ _9"></span>不包括在内。<span class="_ _9"></span>)<span class="_ _9"></span>。<span class="_ _9"></span>白话一<span class="_ _3"></span>下这个通信过程,<span class="_ _2"></span><span class="ff5">Server<span class="_ _4"> </span><span class="ff2">端开放端<span class="_ _3"></span>口,<span class="_ _9"></span>供<span class="_ _4"> </span><span class="ff5">Client<span class="_"> </span></span>连接,<span class="_ _9"></span><span class="ff5">Client</span></span></span></div><div class="t m0 x1 h3 y43 ff2 fs1 fc1 sc0 ls0 ws0">发起请求,连接到<span class="_ _0"> </span><span class="ff5">Serve<span class="_ _3"></span>r<span class="_ _4"> </span></span>指定的端<span class="_ _3"></span>口,完成绑定。随后<span class="_ _3"></span>便可自由通信。其实<span class="_ _3"></span>就是普通<span class="_ _0"> </span><span class="ff5">Soc<span class="_ _3"></span>ket<span class="_ _4"> </span></span>连接<span class="_ _3"></span>通信的过程。<span class="_ _3"></span><span class="ff5"> </span></div><div class="t m0 x1 h4 y44 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x1 h3 y45 ff5 fs1 fc1 sc0 ls0 ws0">Netty<span class="_ _4"> </span><span class="ff2">框架是<span class="_ _3"></span>基于事件机制的,<span class="_ _a"></span>简单说,<span class="_ _a"></span>就是发生什么事<span class="_ _3"></span>,<span class="_ _b"></span>就找相关处理方<span class="_ _3"></span>法。<span class="_ _b"></span>就跟着火了找<span class="_ _1"> </span><span class="ff5 ls4">119</span>,<span class="_ _b"></span>抢劫了找<span class="_ _0"> </span><span class="ff5 ls4">110<span class="_"> </span></span>一个道理。<span class="_ _8"></span>所以,<span class="_ _a"></span>这里,</span></div><div class="t m0 x1 h3 y46 ff2 fs1 fc1 sc0 ls0 ws0">我们处理的是当客户端<span class="_ _3"></span>和服务端完成连<span class="_ _3"></span>接以后的这个事件。什么时候完成的连接,<span class="ff5">Netty<span class="_ _4"> </span></span>知道,他告诉我了,<span class="_ _2"></span>我就负责处理。这就是框架</div><div class="t m0 x1 h3 y47 ff2 fs1 fc1 sc0 ls0 ws0">的作用。<span class="ff5">Netty</span>,提供的<span class="_ _3"></span>事件还有很多,<span class="_ _3"></span>以后会慢慢的接触和介<span class="_ _3"></span>绍。<span class="_ _3"></span><span class="ff5"> </span></div><div class="t m0 x1 h4 y48 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x1 h3 y49 ff2 fs1 fc1 sc0 ls0 ws0">你应该已经可以上手了<span class="_ _3"></span>:)<span class="ff5"> </span></div><div class="t m0 x1 hb y4a ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y4b ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y4c ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y4d ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y4e ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y4f ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y50 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y51 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y52 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y53 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y54 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y55 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y56 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y57 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y58 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y59 ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y5a ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y5b ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y5c ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y5d ff9 fs3 fc3 sc0 ls0 ws0"> </div><div class="t m0 x1 hb y5e ff9 fs3 fc3 sc0 ls0 ws0"> </div></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
<div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62512c786caf5961923b5587/bg4.jpg"><div class="t m0 x1 h2 y1 ff1 fs0 fc0 sc0 ls0 ws0">Java NIO<span class="_ _0"> </span><span class="ff2 sc1">框架<span class="_ _1"> </span></span>Netty<span class="_ _4"> </span><span class="ff2 sc1">教程(二)</span> <span class="_ _0"> </span><span class="ff3">–</span> <span class="_ _4"> </span><span class="ff2 sc1">白话概念</span><span class="ff4 fc1"> </span></div><div class="t m0 x1 h3 y2 ff5 fs1 fc5 sc0 ls0 ws0">"Hello <span class="_ _5"> </span>World"<span class="ff2 fc1">的代码<span class="_ _3"></span>固然简单,不过其<span class="_ _3"></span>中的几个重要概念(类<span class="_ _3"></span>)和<span class="ff5"> <span class="_ _5"> </span>Net<span class="_ _3"></span>ty<span class="_ _6"> </span></span>的<span class="_ _3"></span>工作原理还是需要<span class="_ _3"></span>简单明确一下,至少<span class="_ _3"></span>知道其是负责什。<span class="_ _3"></span>方</span></div><div class="t m0 x1 h3 y3 ff2 fs1 fc1 sc0 ls0 ws0">便自己以后更灵活的使<span class="_ _3"></span>用和扩展。<span class="_ _3"></span><span class="ff6"> </span></div><div class="t m0 x1 h4 y4 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x1 h3 y5 ff2 fs1 fc1 sc0 ls0 ws0">声明,笔者一介码农,<span class="_ _3"></span>不会那么多专业<span class="_ _3"></span>的词汇和缩写,只能以<span class="_ _3"></span>最简单苍白的话<span class="_ _3"></span>来形容个人的感受和体<span class="_ _3"></span>会。如果您觉得<span class="_ _3"></span>这太不专业,笔者</div><div class="t m0 x1 h3 y5f ff2 fs1 fc1 sc0 ls0 ws0">首先只能抱歉。然后,<span class="_ _3"></span>笔者曾转过《<span class="ff5 fc0">Ne<span class="_ _3"></span>tty<span class="_ _0"> </span><span class="ff2">代码分析</span></span>》,<span class="_ _3"></span>您可参考。<span class="ff5"> </span></div><div class="t m0 x4 hc y60 ffa fs4 fc1 sc0 ls0 ws0"><span class="ffb"> <span class="_ _c"> </span><span class="ffc fs5">ChannelEvent<span class="_ _2"></span><span class="ff6 fs1"> </span></span></span></div><div class="t m0 x5 h4 y61 ff6 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x1 h3 y62 ff2 fs1 fc1 sc0 ls0 ws0">先说这个<span class="_ _4"> </span><span class="ff5">C<span class="_ _3"></span>hannelEvent</span>,因为<span class="_ _0"> </span><span class="ff5">Ne<span class="_ _3"></span>tty<span class="_ _4"> </span></span>是<span class="_ _3"></span>基于事件驱动的,就是<span class="_ _3"></span>我们<span class="fc2 ls5">上文</span>提到的,发生什么事,<span class="_ _3"></span>就通知<span class="ff5">"</span>有关<span class="_ _3"></span>部门<span class="ff5">"</span>。所以,不难<span class="_ _3"></span>理解,我</div><div class="t m0 x1 h3 y63 ff2 fs1 fc1 sc0 ls0 ws0">们自己的业务代码中,<span class="_ _3"></span>一定有跟这些事<span class="_ _3"></span>件相关的处理。在<span class="_ _3"></span><span class="fc6">样例代码</span>,我们处<span class="_ _3"></span>理的事件,就是<span class="_ _0"> </span><span class="ff5">c<span class="_ _3"></span>hannelConnected<span class="_ _3"></span></span>。以后,我们还<span class="_ _3"></span>会处理更</div><div class="t m0 x1 h3 y64 ff2 fs1 fc1 sc0 ls0 ws0">多的事件。<span class="ff5"> </span></div><div class="t m0 x1 h4 y65 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x4 hc y66 ffa fs4 fc1 sc0 ls0 ws0"><span class="ffb"> <span class="_ _c"> </span><span class="ffc fs5">ChannelPipeline<span class="_ _2"></span><span class="ff5 fs1"> </span></span></span></div><div class="t m0 x6 h4 y67 ff5 fs1 fc1 sc0 ls0 ws0"> </div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>
<div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="https://static.pudn.com/prod/directory_preview_static/62512c786caf5961923b5587/bg5.jpg"><div class="t m0 x1 h3 y68 ff5 fs1 fc1 sc0 ls0 ws0">Pipeline<span class="ff2">,翻译成中文<span class="_ _3"></span>的意思是:管道,<span class="_ _3"></span>传输途径。也就是说,<span class="_ _3"></span>在这里他是控制<span class="_ _1"> </span></span>ChannelEvent<span class="_ _0"> </span><span class="ff2">事件分发和传<span class="_ _3"></span>递的。事件在管道中<span class="_ _3"></span>流转,</span></div><div class="t m0 x1 h3 y2 ff2 fs1 fc1 sc0 ls0 ws0">第一站到哪,第二站到哪,到哪是终点,就是用这个<span class="_ _4"> </span><span class="ff5">C<span class="_ _3"></span>hannelPipeline<span class="_"> </span></span>处理的。<span class="_ _2"></span>比如:开发事件。<span class="_ _2"></span>先给<span class="_ _4"> </span><span class="ff5">A<span class="_"> </span></span>设计,<span class="_ _2"></span>然后给<span class="_ _0"> </span><span class="ff5">B<span class="_ _4"> </span></span>开发。一个流转</div><div class="t m0 x1 h3 y3 ff2 fs1 fc1 sc0 ls0 ws0">图,希望能给你更直观<span class="_ _3"></span>的感觉。<span class="_ _3"></span><span class="ff5"> </span></div><div class="t m0 x7 h4 y69 ff5 fs1 fc1 sc0 ls0 ws0"> </div><div class="t m0 x4 hc y66 ffa fs4 fc1 sc0 ls0 ws0"><span class="ffb"> <span class="_ _c"> </span><span class="ffc fs5">ChannelHandle<span class="_ _2"></span>r<span class="ff5 fs1"> </span></span></span></div><div class="t m0 x1 h3 y6a ff2 fs1 fc1 sc0 ls0 ws0">刚说<span class="_ _4"> </span><span class="ff5">Pipeli<span class="_ _3"></span>ne<span class="_ _4"> </span></span>负责把<span class="_ _3"></span>事件分发到相应的<span class="_ _3"></span>站点,那个这个站点在<span class="_ _0"> </span><span class="ff5">Netty<span class="_"> </span></span>里,<span class="_ _2"></span>就是指<span class="_ _0"> </span><span class="ff5">ChannelHandler</span>。事件到了<span class="_ _0"> </span><span class="ff5">Chan<span class="_ _3"></span>nelHandler<span class="_ _0"> </span></span>这里,就要</div><div class="t m0 x1 h3 y6b ff2 fs1 fc1 sc0 ls0 ws0">被具体的进行处理了<span class="_ _3"></span>,<span class="_ _d"></span>我们的<span class="fc5">样<span class="_ _3"></span>例代码</span>里,<span class="_ _d"></span>实现的<span class="_ _3"></span>就是这样一个处理事<span class="_ _3"></span>件的<span class="ff7">―</span><span class="ls5">站点</span><span class="ff7">‖</span>,<span class="_ _d"></span>也就是说,<span class="_ _7"></span>你自己的业<span class="_ _3"></span>务逻辑一般都是从这<span class="_ _3"></span>里开始的。<span class="_ _3"></span><span class="ff5"> </span></div><div class="t m0 x4 hc y6c ffa fs4 fc1 sc0 ls0 ws0"><span class="ffb"> <span class="_ _c"> </span><span class="ffc fs5">Channel<span class="ff5 fs1"> </span></span></span></div><a class="l" rel='nofollow' onclick='return false;'><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>