优化WebSocket.IOThread

This commit is contained in:
redkale
2023-03-27 21:36:22 +08:00
parent 34fb441817
commit 9ef977aee9
6 changed files with 26 additions and 20 deletions

View File

@@ -567,6 +567,7 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
} }
} }
HttpContext rs = new HttpContext(contextConfig); HttpContext rs = new HttpContext(contextConfig);
if (false) { //暂不使用WebSocketAsyncGroup模式
rs.webSocketWriterIOThreadFunc = ws -> { rs.webSocketWriterIOThreadFunc = ws -> {
if (asyncGroup == null) { if (asyncGroup == null) {
groupLock.lock(); groupLock.lock();
@@ -582,6 +583,7 @@ public class HttpServer extends Server<String, HttpContext, HttpRequest, HttpRes
} }
return (WebSocketWriteIOThread) asyncGroup.nextWriteIOThread(); return (WebSocketWriteIOThread) asyncGroup.nextWriteIOThread();
}; };
}
return rs; return rs;
} }

View File

@@ -86,7 +86,8 @@ public abstract class WebSocket<G extends Serializable, T> {
WebSocketReadHandler _readHandler; WebSocketReadHandler _readHandler;
//WebSocketWriteHandler _writeHandler; WebSocketWriteHandler _writeHandler;
WebSocketWriteIOThread _writeIOThread; WebSocketWriteIOThread _writeIOThread;
InetSocketAddress _sncpAddress; //分布式下不可为空 InetSocketAddress _sncpAddress; //分布式下不可为空
@@ -239,14 +240,14 @@ public abstract class WebSocket<G extends Serializable, T> {
* @return 0表示成功 非0表示错误码 * @return 0表示成功 非0表示错误码
*/ */
CompletableFuture<Integer> sendPacket(WebSocketPacket packet) { CompletableFuture<Integer> sendPacket(WebSocketPacket packet) {
if (this._writeIOThread == null) { if (this._writeHandler == null) { //if (this._writeIOThread == null) {
if (delayPackets == null) { if (delayPackets == null) {
delayPackets = new ArrayList<>(); delayPackets = new ArrayList<>();
} }
delayPackets.add(packet); delayPackets.add(packet);
return CompletableFuture.completedFuture(RETCODE_DEAYSEND); return CompletableFuture.completedFuture(RETCODE_DEAYSEND);
} }
CompletableFuture<Integer> rs = this._writeIOThread.send(this, packet); CompletableFuture<Integer> rs = this._writeHandler.send(packet); //this._writeIOThread.send(this, packet);
if (_engine.logger.isLoggable(Level.FINER) && packet != WebSocketPacket.DEFAULT_PING_PACKET) { if (_engine.logger.isLoggable(Level.FINER) && packet != WebSocketPacket.DEFAULT_PING_PACKET) {
_engine.logger.finer("userid:" + getUserid() + " send websocket message(" + packet + ")" + " on " + this); _engine.logger.finer("userid:" + getUserid() + " send websocket message(" + packet + ")" + " on " + this);
} }

View File

@@ -20,6 +20,7 @@ import org.redkale.util.ByteBufferPool;
* *
* @since 2.8.0 * @since 2.8.0
*/ */
@Deprecated(since = "2.8.0")
class WebSocketAsyncGroup extends AsyncIOGroup { class WebSocketAsyncGroup extends AsyncIOGroup {
public WebSocketAsyncGroup(String threadNameFormat, ExecutorService workExecutor, ByteBufferPool safeBufferPool) { public WebSocketAsyncGroup(String threadNameFormat, ExecutorService workExecutor, ByteBufferPool safeBufferPool) {

View File

@@ -285,7 +285,7 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
@Override @Override
public void completed(Integer result, Void attachment) { public void completed(Integer result, Void attachment) {
webSocket._readHandler = new WebSocketReadHandler(response.getContext(), webSocket, restMessageConsumer); webSocket._readHandler = new WebSocketReadHandler(response.getContext(), webSocket, restMessageConsumer);
//webSocket._writeHandler = new WebSocketWriteHandler(response.getContext(), webSocket); webSocket._writeHandler = new WebSocketWriteHandler(response.getContext(), webSocket);
response.getContext().updateWebSocketWriteIOThread(webSocket); response.getContext().updateWebSocketWriteIOThread(webSocket);
Runnable createUseridHandler = () -> { Runnable createUseridHandler = () -> {
@@ -349,7 +349,8 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
if (webSocket.delayPackets != null) { //存在待发送的消息 if (webSocket.delayPackets != null) { //存在待发送的消息
List<WebSocketPacket> delayPackets = webSocket.delayPackets; List<WebSocketPacket> delayPackets = webSocket.delayPackets;
webSocket.delayPackets = null; webSocket.delayPackets = null;
CompletableFuture<Integer> cf = webSocket._writeIOThread.send(webSocket, delayPackets.toArray(new WebSocketPacket[delayPackets.size()])); //CompletableFuture<Integer> cf = webSocket._writeIOThread.send(webSocket, delayPackets.toArray(new WebSocketPacket[delayPackets.size()]));
CompletableFuture<Integer> cf = webSocket._writeHandler.send(delayPackets.toArray(new WebSocketPacket[delayPackets.size()]));
cf.whenComplete((Integer v, Throwable t) -> { cf.whenComplete((Integer v, Throwable t) -> {
if (userid == null || t != null) { if (userid == null || t != null) {
if (t != null) { if (t != null) {
@@ -368,7 +369,8 @@ public abstract class WebSocketServlet extends HttpServlet implements Resourcabl
if (webSocket.delayPackets != null) { //存在待发送的消息 if (webSocket.delayPackets != null) { //存在待发送的消息
List<WebSocketPacket> delayPackets = webSocket.delayPackets; List<WebSocketPacket> delayPackets = webSocket.delayPackets;
webSocket.delayPackets = null; webSocket.delayPackets = null;
CompletableFuture<Integer> cf = webSocket._writeIOThread.send(webSocket, delayPackets.toArray(new WebSocketPacket[delayPackets.size()])); //CompletableFuture<Integer> cf = webSocket._writeIOThread.send(webSocket, delayPackets.toArray(new WebSocketPacket[delayPackets.size()]));
CompletableFuture<Integer> cf = webSocket._writeHandler.send(delayPackets.toArray(new WebSocketPacket[delayPackets.size()]));
cf.whenComplete((Integer v, Throwable t) -> { cf.whenComplete((Integer v, Throwable t) -> {
if (sessionid == null || t != null) { if (sessionid == null || t != null) {
if (t != null) { if (t != null) {

View File

@@ -17,7 +17,6 @@ import org.redkale.util.ByteArray;
* *
* @author zhangjx * @author zhangjx
*/ */
@Deprecated(since = "2.8.0")
public class WebSocketWriteHandler implements CompletionHandler<Integer, Void> { public class WebSocketWriteHandler implements CompletionHandler<Integer, Void> {
protected final HttpContext context; protected final HttpContext context;

View File

@@ -21,6 +21,7 @@ import org.redkale.util.*;
* *
* @since 2.8.0 * @since 2.8.0
*/ */
@Deprecated(since = "2.8.0")
public class WebSocketWriteIOThread extends AsyncIOThread { public class WebSocketWriteIOThread extends AsyncIOThread {
private final ScheduledThreadPoolExecutor timeoutExecutor; private final ScheduledThreadPoolExecutor timeoutExecutor;