优化WebSocket.IOThread
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user