From 0859dee201f957551fbb2fa9e362622d0d670ddf Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Sat, 20 May 2017 13:43:02 +0800 Subject: [PATCH] --- src/org/redkale/net/http/WebSocketRunner.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/org/redkale/net/http/WebSocketRunner.java b/src/org/redkale/net/http/WebSocketRunner.java index 7ff87c3f5..accfc9969 100644 --- a/src/org/redkale/net/http/WebSocketRunner.java +++ b/src/org/redkale/net/http/WebSocketRunner.java @@ -191,7 +191,13 @@ public class WebSocketRunner implements Runnable { @Override public void completed(Integer result, ByteBuffer attachment) { - if (attachment == null || closed) return; + if (attachment == null || closed) { + if (future != null) { + future.complete(RETCODE_WSOCKET_CLOSED); + future = null; + } + return; + } try { if (attachment.hasRemaining()) { if (debug) context.getLogger().log(Level.FINEST, "WebSocketRunner write completed reemaining: " + attachment.remaining()); @@ -204,8 +210,15 @@ public class WebSocketRunner implements Runnable { } QueueEntry entry = queue.poll(); ByteBuffer localWriteBuffer = writeBuffer; - if (entry == null || localWriteBuffer == null) return; //没有数据了 + if (entry == null) return; //没有数据了 future = entry.future; + if (localWriteBuffer == null) { + if (future != null) { + future.complete(RETCODE_WSOCKET_CLOSED); + future = null; + } + return; + } byte[] bs = entry.bytes; ByteBuffer sendBuffer; if (bs.length <= localWriteBuffer.capacity()) { @@ -217,7 +230,6 @@ public class WebSocketRunner implements Runnable { sendBuffer = ByteBuffer.wrap(bs); } channel.write(sendBuffer, sendBuffer, this); - } catch (Exception e) { closeRunner(); context.getLogger().log(Level.WARNING, "WebSocket sendMessage abort on rewrite, force to close channel, live " + (System.currentTimeMillis() - webSocket.getCreatetime()) / 1000 + " seconds", e);