启动类:
package com.sharejdbc.test;
import com.sharejdbc.test.config.NettyServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by Kane on 2018/1/17.
*/
@SpringBootApplication
public class ShareJdbcApplication implements CommandLineRunner {
@Autowired(required = false)
NettyServer nettyServer;
public static void main(String[] args) {
SpringApplication.run(ShareJdbcApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
nettyServer.sever();
}
}
netty服务类:
package com.sharejdbc.test.config;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import org.springframework.stereotype.Component;
/**
* @authorseerhuitao netty的服务器
* @create2019/5/28
*/
@Component
public class NettyServer {
public void sever() {
ServerBootstrap sb=new ServerBootstrap();
EventLoopGroup boss=new NioEventLoopGroup();
EventLoopGroup work=new NioEventLoopGroup();
try{
sb.group(boss,work).channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG,1024)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception
{
ChannelPipeline cp=socketChannel.pipeline();
//添加直接处理消息
cp.addLast(new ServerHandler());
}
});
ChannelFuture cf=sb.bind(8089).sync();
System.out.println("服务已经启动!");
cf.channel().closeFuture().sync();
}catch(Exception e){
}finally{
work.shutdownGracefully();
boss.shutdownGracefully();
}
}
}
handler的处理类:
package com.sharejdbc.test.config;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import java.nio.charset.Charset;
import java.util.Date;
/**
* @authorseerhuitao 处理消息的handler
* @create2019/5/28
*/
public class ServerHandler extends ChannelInboundHandlerAdapter{
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println("开始接受消息了");
ByteBuf buffer = (ByteBuf) msg;
System.out.println(new Date() + ": 客户端读到数据 -> " + buffer.toString(Charset.forName("utf-8")));
}
}
pow.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.sharejdbc</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ShareJdbc</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.19.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
启动springboot项目!windows下打开telnet
输入:telnet 127.0.0.1 8089
再输入:Ctrl+]
先输入命令:send +“输入的内容”,点击回车发送内容。
成功!