Netty系列之一开始使用
2024-08-27 19:41:53
Netty是用来做什么的呢,我的理解是它是一个网络开发框架,利用它能很快速方便的开发出高性能的服务端和客户端。刚开始学习java的时候你一定接触过怎么利用socket去实现服务端和客户端,后来java出了NIO这一大利器极大提供了网络程序的性能,但是NIO是基于事件驱动的模型,理解起来比常用的套接字编程要难一点,但是无论是利用NIO还是原始的socket编程从0开始编写一个服务端或是客户端实在是太困难了。Netty就是帮助你去解决这样的问题的,废话不多说先简单介绍一个例子,我们要写一个服务端绑定端口号后,等待客户端的连接,客户端连接后打印一句欢迎语句,然后客户端输入什么,服务端打印出来,并且返回给客户端输出,利用netty实现如下
public class Server { private ServerBootstrap serverBootstrap; private int port; public Server(int port) {
this.port = port;
serverBootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
ChannelPipeline channelPipeline = Channels.pipeline();
channelPipeline.addLast("decoder", new StringDecoder());
channelPipeline.addLast("encoder", new StringEncoder());
channelPipeline.addLast("serverHandler", new ServerHandler());
return channelPipeline;
}
});
serverBootstrap.bind(new InetSocketAddress(this.port));
} private class ServerHandler extends SimpleChannelUpstreamHandler {
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
if(e.getMessage() instanceof String) {
String message = (String) e.getMessage();
System.out.println("Client Send:" + message);
e.getChannel().write("Server receive:" + message);
}
} @Override
public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
System.out.println("A client connected to this server");
System.out.println("Client:" + e.getChannel().getRemoteAddress());
e.getChannel().write("******************************\r\n");
e.getChannel().write("Welcome to connect this server\r\n");
e.getChannel().write("******************************\r\n");
}
} public static void main(String args[]) {
new Server(9999);
}
}
最新文章
- 使用DFA做文本编辑器的自动提示
- 【迁移】—Entity Framework实例详解 转
- python smtplib email
- switch
- TeraData金融数据模型
- uml定义的使用的关系
- CUBRID学习笔记 41 sql语法之select
- 在.net中序列化读写xml方法的总结
- byte数组转16进制 输出到文件
- NodeJs之服务搭建与数据库连接
- 项目Alpha冲刺(团队)-第三天冲刺
- 洛谷P2320鬼谷子的钱袋.
- kubernetes 基础
- Android 时间与日期操作类
- ActiveMQ Advisory Message
- <;kafka>;<;应用场景>;<;Kafka VS Flume>;
- Java设计模式(8)——策略模式
- SDN2017 第五次实验作业
- eclipse下载与安装并测试
- 图形 - bootStrap4常用CSS笔记