From 2aee84d477a94326b4a3ac2d38f19e11b2e0c1b5 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Mon, 19 Jun 2017 09:53:29 +0800 Subject: [PATCH] --- src/org/redkale/net/http/WebSocket.java | 27 +++++++------------ src/org/redkale/net/http/WebSocketBinary.java | 24 ----------------- src/org/redkale/net/http/WebSocketRunner.java | 9 +------ .../redkale/net/http/WebSocketServlet.java | 5 +--- 4 files changed, 12 insertions(+), 53 deletions(-) delete mode 100644 src/org/redkale/net/http/WebSocketBinary.java diff --git a/src/org/redkale/net/http/WebSocket.java b/src/org/redkale/net/http/WebSocket.java index 56f336621..ee15995ed 100644 --- a/src/org/redkale/net/http/WebSocket.java +++ b/src/org/redkale/net/http/WebSocket.java @@ -14,26 +14,18 @@ import java.util.concurrent.*; import java.util.function.Supplier; import java.util.stream.Stream; import org.redkale.convert.Convert; -import org.redkale.net.*; import org.redkale.util.Comment; /** *
  * 一个WebSocket连接对应一个WebSocket实体,即一个WebSocket会绑定一个TCP连接。
- * WebSocket 有两种模式:
- *  1) 普通模式: 协议上符合HTML5规范, 其流程顺序如下:
+ * 协议上符合HTML5规范, 其流程顺序如下:
  *      1.1 onOpen 若返回null,视为WebSocket的连接不合法,强制关闭WebSocket连接;通常用于判断登录态。
  *      1.2 createUserid 若返回null,视为WebSocket的连接不合法,强制关闭WebSocket连接;通常用于判断用户权限是否符合。
  *      1.3 onConnected WebSocket成功连接后在准备接收数据前回调此方法。
  *      1.4 onMessage/onFragment+ WebSocket接收到消息后回调此消息类方法。
  *      1.5 onClose WebSocket被关闭后回调此方法。
  *  普通模式下 以上方法都应该被重载。
- *
- *  2) 原始二进制模式: 此模式有别于HTML5规范,可以视为原始的TCP连接。通常用于音频视频通讯场景。其流程顺序如下:
- *      2.1 onOpen 若返回null,视为WebSocket的连接不合法,强制关闭WebSocket连接;通常用于判断登录态。
- *      2.2 createWebSocketid 若返回null,视为WebSocket的连接不合法,强制关闭WebSocket连接;通常用于判断用户权限是否符合。
- *      2.3 onRead WebSocket成功连接后回调此方法, 由此方法处理原始的TCP连接, 需要业务代码去控制WebSocket的关闭。
- *  二进制模式下 以上方法都应该被重载。
  * 
*

* 详情见: https://redkale.org @@ -422,14 +414,6 @@ public abstract class WebSocket { */ protected abstract CompletableFuture createUserid(); - /** - * 标记为WebSocketBinary才需要重写此方法 - * - * @param channel 请求连接 - */ - public void onRead(AsyncConnection channel) { - } - /** * WebSokcet连接成功后的回调方法 */ @@ -461,6 +445,15 @@ public abstract class WebSocket { public void onMessage(T message, boolean last) { } + /** + * 接收到文本消息的回调方法 + * + * @param text 消息 + * @param last 是否最后一条 + */ + public void onMessage(String text, boolean last) { + } + /** * 接收到二进制消息的回调方法 * diff --git a/src/org/redkale/net/http/WebSocketBinary.java b/src/org/redkale/net/http/WebSocketBinary.java deleted file mode 100644 index 1a80afb78..000000000 --- a/src/org/redkale/net/http/WebSocketBinary.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.redkale.net.http; - -import java.lang.annotation.*; -import static java.lang.annotation.ElementType.*; -import static java.lang.annotation.RetentionPolicy.RUNTIME; - -/** - * 被标记为 @WebSocketBinary 的WebSocketServlet 将使用原始的TCP传输, 通常用于类似音频/视频传输场景 - * - *

详情见: https://redkale.org - * @author zhangjx - */ -@Inherited -@Documented -@Target({TYPE}) -@Retention(RUNTIME) -public @interface WebSocketBinary { - -} diff --git a/src/org/redkale/net/http/WebSocketRunner.java b/src/org/redkale/net/http/WebSocketRunner.java index 82faef0ab..bf0c06347 100644 --- a/src/org/redkale/net/http/WebSocketRunner.java +++ b/src/org/redkale/net/http/WebSocketRunner.java @@ -44,19 +44,16 @@ class WebSocketRunner implements Runnable { private final BlockingQueue queue = new ArrayBlockingQueue(1024); - private final boolean wsbinary; - private final BiConsumer restMessageConsumer; //主要供RestWebSocket使用 protected long lastSendTime; - WebSocketRunner(Context context, WebSocket webSocket, BiConsumer messageConsumer, AsyncConnection channel, final boolean wsbinary) { + WebSocketRunner(Context context, WebSocket webSocket, BiConsumer messageConsumer, AsyncConnection channel) { this.context = context; this.engine = webSocket._engine; this.webSocket = webSocket; this.restMessageConsumer = messageConsumer; this.channel = channel; - this.wsbinary = wsbinary; this.readBuffer = context.pollBuffer(); } @@ -67,10 +64,6 @@ class WebSocketRunner implements Runnable { webSocket.onConnected(); channel.setReadTimeoutSecond(300); //读取超时5分钟 if (channel.isOpen()) { - if (wsbinary) { - webSocket.onRead(channel); - return; - } channel.read(readBuffer, null, new CompletionHandler() { private ByteBuffer recentExBuffer; diff --git a/src/org/redkale/net/http/WebSocketServlet.java b/src/org/redkale/net/http/WebSocketServlet.java index edada704e..e8c6f5a7b 100644 --- a/src/org/redkale/net/http/WebSocketServlet.java +++ b/src/org/redkale/net/http/WebSocketServlet.java @@ -53,9 +53,6 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl private final MessageDigest digest = getMessageDigest(); - @Comment("是否用于二进制流传输") - protected final boolean wsbinary = getClass().getAnnotation(WebSocketBinary.class) != null; - private final BiConsumer restMessageConsumer = createRestOnMessageConsumer(); protected Type messageTextType; //RestWebSocket时会被修改 @@ -183,7 +180,7 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl } webSocket._userid = userid; WebSocketServlet.this.node.localEngine.add(webSocket); - WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel(), wsbinary); + WebSocketRunner runner = new WebSocketRunner(context, webSocket, restMessageConsumer, response.removeChannel()); webSocket._runner = runner; context.runAsync(runner); response.finish(true);