forked from fuzhengwei/CodeGuide
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2627786
commit a066550
Showing
5 changed files
with
164 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
<?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"> | ||
<parent> | ||
<artifactId>itstack-demo-netty</artifactId> | ||
<groupId>org.itatack.demo</groupId> | ||
<version>1.0.0-SNAPSHOT</version> | ||
</parent> | ||
<modelVersion>4.0.0</modelVersion> | ||
|
||
<artifactId>itstack-demo-netty-1-04</artifactId> | ||
|
||
|
||
</project> |
27 changes: 27 additions & 0 deletions
27
...ack-demo-netty-1-04/src/main/java/org/itstack/demo/netty/server/MyChannelInitializer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package org.itstack.demo.netty.server; | ||
|
||
import io.netty.channel.ChannelInitializer; | ||
import io.netty.channel.socket.SocketChannel; | ||
import io.netty.handler.codec.LineBasedFrameDecoder; | ||
import io.netty.handler.codec.string.StringDecoder; | ||
|
||
import java.nio.charset.Charset; | ||
|
||
/** | ||
* 虫洞栈:https://bugstack.cn | ||
* 公众号:bugstack虫洞栈 {获取学习源码} | ||
* Create by fuzhengwei on 2019 | ||
*/ | ||
public class MyChannelInitializer extends ChannelInitializer<SocketChannel> { | ||
|
||
@Override | ||
protected void initChannel(SocketChannel channel) { | ||
// 基于换行符号 | ||
channel.pipeline().addLast(new LineBasedFrameDecoder(1024)); | ||
// 解码转String,注意调整自己的编码格式GBK、UTF-8 | ||
channel.pipeline().addLast(new StringDecoder(Charset.forName("GBK"))); | ||
// 在管道中添加我们自己的接收数据实现方法 | ||
channel.pipeline().addLast(new MyServerHandler()); | ||
} | ||
|
||
} |
65 changes: 65 additions & 0 deletions
65
.../itstack-demo-netty-1-04/src/main/java/org/itstack/demo/netty/server/MyServerHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package org.itstack.demo.netty.server; | ||
|
||
import io.netty.buffer.ByteBuf; | ||
import io.netty.buffer.Unpooled; | ||
import io.netty.channel.ChannelHandlerContext; | ||
import io.netty.channel.ChannelInboundHandlerAdapter; | ||
import io.netty.channel.socket.SocketChannel; | ||
|
||
import java.text.SimpleDateFormat; | ||
import java.util.Date; | ||
|
||
/** | ||
* 虫洞栈:https://bugstack.cn | ||
* 公众号:bugstack虫洞栈 {获取学习源码} | ||
* Create by fuzhengwei on 2019 | ||
*/ | ||
public class MyServerHandler extends ChannelInboundHandlerAdapter { | ||
|
||
/** | ||
* 当客户端主动链接服务端的链接后,这个通道就是活跃的了。也就是客户端与服务端建立了通信通道并且可以传输数据 | ||
*/ | ||
@Override | ||
public void channelActive(ChannelHandlerContext ctx) throws Exception { | ||
SocketChannel channel = (SocketChannel) ctx.channel(); | ||
System.out.println("链接报告开始"); | ||
System.out.println("链接报告信息:有一客户端链接到本服务端"); | ||
System.out.println("链接报告IP:" + channel.localAddress().getHostString()); | ||
System.out.println("链接报告Port:" + channel.localAddress().getPort()); | ||
System.out.println("链接报告完毕"); | ||
//通知客户端链接建立成功 | ||
String str = "通知客户端链接建立成功" + " " + new Date() + " " + channel.localAddress().getHostString() + "\r\n"; | ||
ByteBuf buf = Unpooled.buffer(str.getBytes().length); | ||
buf.writeBytes(str.getBytes("GBK")); | ||
ctx.writeAndFlush(buf); | ||
} | ||
|
||
/** | ||
* 当客户端主动断开服务端的链接后,这个通道就是不活跃的。也就是说客户端与服务端的关闭了通信通道并且不可以传输数据 | ||
*/ | ||
@Override | ||
public void channelInactive(ChannelHandlerContext ctx) throws Exception { | ||
System.out.println("客户端断开链接" + ctx.channel().localAddress().toString()); | ||
} | ||
|
||
@Override | ||
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { | ||
//接收msg消息{与上一章节相比,此处已经不需要自己进行解码} | ||
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " 接收到消息:" + msg); | ||
//通知客户端链消息发送成功 | ||
String str = "服务端收到:" + new Date() + " " + msg + "\r\n"; | ||
ByteBuf buf = Unpooled.buffer(str.getBytes().length); | ||
buf.writeBytes(str.getBytes("GBK")); | ||
ctx.writeAndFlush(buf); | ||
} | ||
|
||
/** | ||
* 抓住异常,当发生异常的时候,可以做一些相应的处理,比如打印日志、关闭链接 | ||
*/ | ||
@Override | ||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { | ||
ctx.close(); | ||
System.out.println("异常信息:\r\n" + cause.getMessage()); | ||
} | ||
|
||
} |
43 changes: 43 additions & 0 deletions
43
...etty/itstack-demo-netty-1-04/src/main/java/org/itstack/demo/netty/server/NettyServer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package org.itstack.demo.netty.server; | ||
|
||
import io.netty.bootstrap.ServerBootstrap; | ||
import io.netty.channel.ChannelFuture; | ||
import io.netty.channel.ChannelOption; | ||
import io.netty.channel.EventLoopGroup; | ||
import io.netty.channel.nio.NioEventLoopGroup; | ||
import io.netty.channel.socket.nio.NioServerSocketChannel; | ||
|
||
/** | ||
* 虫洞栈:https://bugstack.cn | ||
* 公众号:bugstack虫洞栈 {获取学习源码} | ||
* Create by fuzhengwei on 2019 | ||
*/ | ||
public class NettyServer { | ||
|
||
public static void main(String[] args) { | ||
new NettyServer().bing(7397); | ||
} | ||
|
||
private void bing(int port) { | ||
//配置服务端NIO线程组 | ||
EventLoopGroup parentGroup = new NioEventLoopGroup(); //NioEventLoopGroup extends MultithreadEventLoopGroup Math.max(1, SystemPropertyUtil.getInt("io.netty.eventLoopThreads", NettyRuntime.availableProcessors() * 2)); | ||
EventLoopGroup childGroup = new NioEventLoopGroup(); | ||
try { | ||
ServerBootstrap b = new ServerBootstrap(); | ||
b.group(parentGroup, childGroup) | ||
.channel(NioServerSocketChannel.class) //非阻塞模式 | ||
.option(ChannelOption.SO_BACKLOG, 128) | ||
.childHandler(new MyChannelInitializer()); | ||
ChannelFuture f = b.bind(port).sync(); | ||
System.out.println("itstack-demo-netty server start done. {关注公众号:bugstack虫洞栈,获取源码}"); | ||
f.channel().closeFuture().sync(); | ||
} catch (InterruptedException e) { | ||
e.printStackTrace(); | ||
} finally { | ||
childGroup.shutdownGracefully(); | ||
parentGroup.shutdownGracefully(); | ||
} | ||
|
||
} | ||
|
||
} |
14 changes: 14 additions & 0 deletions
14
...tty/itstack-demo-netty-1-04/src/test/java/org/itstack/demo/netty/server/test/ApiTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package org.itstack.demo.netty.server.test; | ||
|
||
/** | ||
* 虫洞栈:https://bugstack.cn | ||
* 公众号:bugstack虫洞栈 {获取学习源码} | ||
* Create by fuzhengwei on 2019 | ||
*/ | ||
public class ApiTest { | ||
|
||
public static void main(String[] args) { | ||
System.out.println("hi! 微信公众号:bugstack虫洞栈"); | ||
} | ||
|
||
} |