forked from netty/netty
-
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.
Add UptimeServer and adjust UptimeClient's code style.
Motivation: Uptime example is lack of server. UptimeClient's code style is a little bit different from others, which make reader feel confused. We don't need to create a new Bootstrap instance each time client reconnect to server. Modification: Add UptimeServer and UptimeServerHandler which simply accept all connection and discard all message. Change UptimeClient's code style. Share a single Bootstrap instance. Result: Uptime server support. Consistent code style. Single Bootstrap for all reconnection.
- Loading branch information
1 parent
ea1cb20
commit 92efa3c
Showing
5 changed files
with
120 additions
and
27 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
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
67 changes: 67 additions & 0 deletions
67
example/src/main/java/io/netty/example/uptime/UptimeServer.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,67 @@ | ||
/* | ||
* Copyright 2017 The Netty Project | ||
* | ||
* The Netty Project licenses this file to you under the Apache License, | ||
* version 2.0 (the "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at: | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
* License for the specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package io.netty.example.uptime; | ||
|
||
import io.netty.bootstrap.ServerBootstrap; | ||
import io.netty.channel.ChannelFuture; | ||
import io.netty.channel.ChannelInitializer; | ||
import io.netty.channel.EventLoopGroup; | ||
import io.netty.channel.nio.NioEventLoopGroup; | ||
import io.netty.channel.socket.SocketChannel; | ||
import io.netty.channel.socket.nio.NioServerSocketChannel; | ||
import io.netty.handler.logging.LogLevel; | ||
import io.netty.handler.logging.LoggingHandler; | ||
|
||
/** | ||
* Uptime server is served as a connection server. | ||
* So it simply discards all message received. | ||
*/ | ||
public final class UptimeServer { | ||
private static final int PORT = Integer.parseInt(System.getProperty("port", "8080")); | ||
private static final UptimeServerHandler handler = new UptimeServerHandler(); | ||
|
||
private UptimeServer() { | ||
} | ||
|
||
public static void main(String[] args) throws Exception { | ||
|
||
EventLoopGroup bossGroup = new NioEventLoopGroup(1); | ||
EventLoopGroup workerGroup = new NioEventLoopGroup(); | ||
try { | ||
ServerBootstrap b = new ServerBootstrap(); | ||
b.group(bossGroup, workerGroup) | ||
.channel(NioServerSocketChannel.class) | ||
.handler(new LoggingHandler(LogLevel.INFO)) | ||
.childHandler(new ChannelInitializer<SocketChannel>() { | ||
@Override | ||
public void initChannel(SocketChannel ch) { | ||
ch.pipeline().addLast(handler); | ||
} | ||
}); | ||
|
||
// Bind and start to accept incoming connections. | ||
ChannelFuture f = b.bind(PORT).sync(); | ||
|
||
// Wait until the server socket is closed. | ||
// In this example, this does not happen, but you can do that to gracefully | ||
// shut down your server. | ||
f.channel().closeFuture().sync(); | ||
} finally { | ||
workerGroup.shutdownGracefully(); | ||
bossGroup.shutdownGracefully(); | ||
} | ||
} | ||
} |
35 changes: 35 additions & 0 deletions
35
example/src/main/java/io/netty/example/uptime/UptimeServerHandler.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,35 @@ | ||
/* | ||
* Copyright 2017 The Netty Project | ||
* | ||
* The Netty Project licenses this file to you under the Apache License, | ||
* version 2.0 (the "License"); you may not use this file except in compliance | ||
* with the License. You may obtain a copy of the License at: | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | ||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | ||
* License for the specific language governing permissions and limitations | ||
* under the License. | ||
*/ | ||
package io.netty.example.uptime; | ||
|
||
import io.netty.channel.ChannelHandler.Sharable; | ||
import io.netty.channel.ChannelHandlerContext; | ||
import io.netty.channel.SimpleChannelInboundHandler; | ||
|
||
@Sharable | ||
public class UptimeServerHandler extends SimpleChannelInboundHandler<Object> { | ||
@Override | ||
public void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception { | ||
// discard | ||
} | ||
|
||
@Override | ||
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { | ||
// Close the connection when an exception is raised. | ||
cause.printStackTrace(); | ||
ctx.close(); | ||
} | ||
} |
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