Skip to content

Commit c2d8d9a

Browse files
committed
close channel group
1 parent 862e562 commit c2d8d9a

File tree

8 files changed

+26
-17
lines changed

8 files changed

+26
-17
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ With `Maven Central` repositories (stable releases only):
1313
<dependency>
1414
<groupId>org.zhongweixian</groupId>
1515
<artifactId>websocket-api</artifactId>
16-
<version>2.0.2</version>
16+
<version>2.0.3</version>
1717
</dependency>
1818
```
1919

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>org.zhongweixian</groupId>
77
<artifactId>websocket-api</artifactId>
8-
<version>2.0.2</version>
8+
<version>2.0.3</version>
99
<packaging>jar</packaging>
1010

1111
<name>websocket-client</name>
@@ -91,7 +91,7 @@
9191
<plugin>
9292
<groupId>org.apache.maven.plugins</groupId>
9393
<artifactId>maven-source-plugin</artifactId>
94-
<version>3.0.1</version>
94+
<version>3.1.0</version>
9595
<executions>
9696
<execution>
9797
<id>attach-sources</id>

src/main/java/org/zhongweixian/client/tcp/NettyClient.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ private void connect() {
137137
channel = channelFuture.channel();
138138
channelFuture.channel().closeFuture().sync();
139139
} catch (InterruptedException e) {
140-
logger.error("{}", e);
140+
logger.error(e.getMessage(), e);
141141
} finally {
142142
if (channelFuture != null) {
143143
if (channelFuture.channel() != null && channelFuture.channel().isOpen()) {
@@ -154,7 +154,7 @@ private void connect() {
154154
}
155155
TimeUnit.SECONDS.sleep(sleep);
156156
} catch (InterruptedException e) {
157-
logger.error("{}", e);
157+
logger.error(e.getMessage(), e);
158158
}
159159
if (!autoReConnect) {
160160
return;
@@ -199,6 +199,7 @@ public void operationComplete(ChannelFuture future) throws Exception {
199199
public void close() {
200200
if (channel != null && channel.isOpen()) {
201201
channel.close();
202+
group.shutdownGracefully();
202203
}
203204
autoReConnect = false;
204205
logger.info("client close {}:{} , autoReConnect:{}", host, port, autoReConnect);

src/main/java/org/zhongweixian/client/tcp/handler/SimpleClientHandler.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public void channelActive(ChannelHandlerContext ctx) throws Exception {
8383
if (authorizationToken.getTimeHeart()) {
8484
logger.info("start send ping, timeHeart:{}s, channel:{}", authorizationToken.getHeart(), ctx.channel().remoteAddress());
8585
if (executorService != null) {
86-
executorService.isShutdown();
86+
executorService.shutdownNow();
8787
}
8888
executorService = Executors.newScheduledThreadPool(1);
8989
executorService.scheduleAtFixedRate(() -> {
@@ -106,20 +106,24 @@ public void channelActive(ChannelHandlerContext ctx) throws Exception {
106106
@Override
107107
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
108108
//异常时断开连接
109-
logger.error("exceptionCaught:{}", cause);
109+
logger.error("exceptionCaught", cause);
110+
if (executorService != null) {
111+
logger.info("shutdown thread:{}", ctx.channel());
112+
executorService.shutdownNow();
113+
}
110114
active = false;
111115
listener.onClose(ctx.channel(), 501, cause.getMessage());
112116
ctx.close();
113117
}
114118

115119
@Override
116120
public void channelInactive(ChannelHandlerContext ctx) {
117-
logger.error("socket close, channel active : {}", ctx.channel().isActive());
121+
logger.error("socket close, channel active:{}", ctx.channel().isActive());
118122
active = false;
119-
listener.onClose(ctx.channel(), 500, "connect to server close");
120123
if (executorService != null) {
121124
executorService.shutdownNow();
122125
}
126+
listener.onClose(ctx.channel(), 500, "connect to server close");
123127
ctx.channel().close();
124128
}
125129
}

src/main/java/org/zhongweixian/client/websocket/WebSocketClient.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class WebSocketClient {
3838
private SslContext sslContext;
3939
private EventLoopGroup group = null;
4040
private Bootstrap bootstrap = null;
41+
private Channel channel;
4142

4243
private static final int HEART_TIME = 10;
4344

@@ -105,12 +106,14 @@ public void operationComplete(ChannelFuture channelFuture) throws Exception {
105106
}
106107
}
107108
});
109+
this.channel = channel;
108110
return new WsConnection(channel);
109111
}
110112

111113

112114
public void close() {
113-
if (group != null) {
115+
if (channel != null && channel.isOpen()) {
116+
channel.close();
114117
group.shutdownGracefully();
115118
}
116119
}

src/main/java/org/zhongweixian/client/websocket/WsClient.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ private void connect() {
115115
}
116116
channelFuture.channel().closeFuture().sync();
117117
} catch (Exception e) {
118-
logger.error("{}", e);
118+
logger.error(e.getMessage(), e);
119119
} finally {
120120
if (channel != null && channel.isOpen()) {
121121
channel.close();
@@ -127,7 +127,7 @@ private void connect() {
127127
try {
128128
TimeUnit.SECONDS.sleep(heart);
129129
} catch (InterruptedException e) {
130-
logger.error("{}", e);
130+
logger.error(e.getMessage(), e);
131131
}
132132
if (!autoReConnect) {
133133
return;
@@ -181,8 +181,9 @@ public boolean isActive() {
181181

182182
public void close() {
183183
autoReConnect = false;
184-
if (channel != null) {
184+
if (channel != null && channel.isOpen()) {
185185
channel.close();
186+
group.shutdownGracefully();
186187
}
187188
}
188189

src/main/java/org/zhongweixian/server/websocket/WebSocketServer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,10 @@ public void start() {
7474
childHandler(new WebSocketServerInitializer(connectionListener, heart, path, null));
7575
ChannelFuture channelFuture = bootstrap.bind().sync();
7676
if (channelFuture.isSuccess()) {
77-
logger.info("websocket started on port :{} (websocket)", port);
77+
logger.info("websocket started on port:{}, path:{}", port, path);
7878
}
7979
} catch (Exception e) {
80-
logger.error("{}", e);
80+
logger.error(e.getMessage(), e);
8181
}
8282
}
8383

src/main/java/org/zhongweixian/server/websocket/WebSocketServerHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ protected void channelRead0(ChannelHandlerContext ctx, WebSocketFrame webSocketF
4242
logger.debug("received client:{}, message:{}", ctx.channel().id(), jsonObject);
4343
}
4444
if ("ping".equals(jsonObject.getString("cmd"))) {
45-
ctx.channel().writeAndFlush(new TextWebSocketFrame("{\"type\":\"pong\",\"sequence\":" + System.currentTimeMillis() + "}"));
45+
ctx.channel().writeAndFlush(new TextWebSocketFrame("{\"type\":\"pong\",\"status\":0,\"sequence\":" + System.currentTimeMillis() + "}"));
4646
return;
4747
}
4848
if (jsonObject != null) {
4949
listener.onMessage(ctx.channel(), textWebSocketFrame.text());
5050
}
5151
} catch (Exception e) {
52-
logger.error("解析json:{} 异常:{}", textWebSocketFrame.text(), e);
52+
logger.error("解析json:{} 异常", textWebSocketFrame.text(), e);
5353
JSONObject error = new JSONObject();
5454
error.put("messgae", e.getMessage());
5555
error.put("code", 500);

0 commit comments

Comments
 (0)