// 业务逻辑处理
package com.bigdata.jboss.basic;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
public class DiscardServerHandler extends SimpleChannelHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
throws Exception {
// do nothing
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
throws Exception {
e.getCause().printStackTrace();
e.getChannel().close();
}
}
1.DiscardServerHandler 继承 SimpleChannelHandler,提供了事件处理的不同方法。
2.messageReceived 事件处理方法中的参数MessageEvent,携带了客户端传送过来的参数,在这个例子中,我们实现的 是 DISCARD协议,处理方法是把传送过来的信息丢弃。
3.exceptionCaught事件处理方法带了ExceptionEvent参数,ExceptionEvent携带了异常信息及连接信息,根据你的业 务 逻辑进行处理,如本例中,输出异常信息及关闭连接。当然,你也可以在关闭连接前,给客户端返回错误编码。
//服务器代码
package com.bigdata.jboss.basic;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
public class DiscardServer {
public static void main(String[] args) {
ChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool());
ServerBootstrap bootstrap = new ServerBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new DiscardServerHandler());
}
});
bootstrap.setOption("child.tcpNoDelay",true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.bind(new InetSocketAddress(8080));
System.out.println("started discard server");
}
}
1. ChannelFactory是创建并管理Channel的工厂,它处理所有I/O请求,及生成I/O ChannelEvent事件。它不创建I/O 线程,它是从构造参数(线程池)中获得线程。
2.ServerBootstrap是一个帮助类,帮助建立服务。
3.ChannelPipelineFactory是生成新的连接工厂。
4.可以给Channel设置参数,如tcpNoDelay,keepAlive,参数需要前缀"child."。
5.绑定端口8080
测试
telnet localhost 8080
结果:
服务端无输出
为了测试,可以在逻辑处理部分修正如下代码:
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
ChannelBuffer buf = (ChannelBuffer) e.getMessage();
while(buf.readable()) {
System.out.print((char) buf.readByte());
System.out.flush();
}
}
1.ChannelBuffer代表了传输的数据结构。
分享到:
相关推荐
netty各种例子(基于netty各种例子。).zip
基于netty各种例子。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
Netty 聊天 小例子 非常适合初学者
Netty5完整例子,里面包含编码,解码,心跳处理等,代码可用。 例子的内容是:服务端启动,客户端启动,客户端连接服务器后服务器发一个Message的对象给客户端,客户端接受并打印Message里边的内容。编解码的处理为:...
java Netty 框架例子源码.rar
netty代码例子
将netty官方提供的例子运用idea工具整理出来并可以运行
netty实现websocket,客户端向服务端发送信息,然后服务器返回当前时间。连接成功后也可向客户端主动发信息。
netty4的官方例子,我已经整理成可运行的maven工程。netty官方例子,我已经整理成可运行的maven工程。
netty例子以及原理,以及在淘宝中应用
Netty5例子自己用
netty4小例子 客户端+服务端+日志 只是小例子
原理及例子,适合入门阶段学习以及提高,简单明了的例子,使你更快掌握
java-netty netty 框架的通信例子,参考www.itstack.org
使用netty作为proxy的例子。 maven。 直接运行
netty例子 官方 netty例子 官方
包含javadoc,jar 两个文件夹。 doc中是文档资料。 jar是源码及常用例子,均好源码,好使。
基于netty-3.2.7.Final写了几个开发模板 有助于了解消息异步通讯机制,tcp通讯的封装. java此类模板还有 mina . 后续会把项目中mina模板抽出来供大家参考.
最近初学netty,收集了网上资料,自己写了个简单的netty入门实例
最近学习netty,整理出来的几个小例子: 1、netty_hello,client可在控制台输入信息,server回复; 2、netty_heart,只有server,可用系统自带的telnet连接!10s没有读写会自动踢掉客户端; 3、packagetest,粘包...