diff --git a/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/SocketOperatorApi.java b/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/SocketOperatorApi.java index 5202c6bd1..098a7dd6f 100644 --- a/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/SocketOperatorApi.java +++ b/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/SocketOperatorApi.java @@ -1,6 +1,5 @@ package cn.stylefeng.roses.kernel.socket.api; -import cn.stylefeng.roses.kernel.socket.api.enums.ServerMessageTypeEnum; import cn.stylefeng.roses.kernel.socket.api.message.SocketMsgCallbackInterface; /** @@ -45,4 +44,5 @@ public interface SocketOperatorApi { * @date 2021/6/2 上午9:54 **/ void msgTypeCallback(String msgType, SocketMsgCallbackInterface callbackInterface); + } diff --git a/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/expander/SocketConfigExpander.java b/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/expander/SocketConfigExpander.java index a9b1d1fd9..a8bf210ea 100644 --- a/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/expander/SocketConfigExpander.java +++ b/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/expander/SocketConfigExpander.java @@ -42,7 +42,7 @@ public class SocketConfigExpander { * @date 2021/6/7 上午11:39 **/ public static String getSocketHost() { - return ConfigContext.me().getSysConfigValueWithDefault("socket_host", String.class, "0.0.0.0"); + return ConfigContext.me().getSysConfigValueWithDefault("SOCKET_HOST", String.class, "0.0.0.0"); } /** @@ -53,7 +53,7 @@ public class SocketConfigExpander { * @date 2021/6/7 上午11:41 **/ public static Integer getSocketPort() { - return ConfigContext.me().getSysConfigValueWithDefault("socket_port", Integer.class, 11130); + return ConfigContext.me().getSysConfigValueWithDefault("SOCKET_PORT", Integer.class, 11130); } /** @@ -64,7 +64,7 @@ public class SocketConfigExpander { * @date 2021/6/7 上午11:41 **/ public static Integer getSocketServerChunkSize() { - return ConfigContext.me().getSysConfigValueWithDefault("socket_server_chunk_size", Integer.class, 512 * 1024 * 1024); + return ConfigContext.me().getSysConfigValueWithDefault("SOCKET_SERVER_CHUNK_SIZE", Integer.class, 512 * 1024 * 1024); } } diff --git a/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/session/SocketSessionOperatorApi.java b/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/session/SocketSessionOperatorApi.java index bfa76a804..923114e01 100644 --- a/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/session/SocketSessionOperatorApi.java +++ b/kernel-d-socket/socket-api/src/main/java/cn/stylefeng/roses/kernel/socket/api/session/SocketSessionOperatorApi.java @@ -67,4 +67,5 @@ public interface SocketSessionOperatorApi { * @date 2021/6/1 上午11:50 **/ boolean isInvalid(); + } diff --git a/kernel-d-socket/socket-business-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/business/websocket/spring/WebSocketApplicationRunnerImpl.java b/kernel-d-socket/socket-business-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/business/websocket/spring/WebSocketApplicationRunnerImpl.java index cf542c83c..13fcf4c9d 100644 --- a/kernel-d-socket/socket-business-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/business/websocket/spring/WebSocketApplicationRunnerImpl.java +++ b/kernel-d-socket/socket-business-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/business/websocket/spring/WebSocketApplicationRunnerImpl.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; + import java.net.StandardSocketOptions; /** @@ -35,6 +36,7 @@ public class WebSocketApplicationRunnerImpl implements ApplicationRunner { aioServerConfig.setServerChunkSize(SocketConfigExpander.getSocketServerChunkSize()); // 设置SocketOptions + // 每个套接口都有一个发送缓冲区和一个接收缓冲区,使用SO_RCVBUF可以改变缺省缓冲区大小。 aioServerConfig.setOption(StandardSocketOptions.SO_RCVBUF, 8192); // 启动 diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/SocketMessageCenter.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/SocketMessageCenter.java index c379aaf1d..25206891a 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/SocketMessageCenter.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/SocketMessageCenter.java @@ -17,8 +17,10 @@ public class SocketMessageCenter { /** * 所有消息监听器维护 + *

+ * key是msgType,value是消息回调监听器 */ - private static Map messageListenerMap = new HashMap<>(); + private static final Map messageListenerMap = new HashMap<>(); /** * 设置消息类型的监听器 @@ -43,4 +45,5 @@ public class SocketMessageCenter { public static SocketMsgCallbackInterface getSocketMsgCallbackInterface(String msgType) { return messageListenerMap.get(msgType); } + } diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/WebSocketOperator.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/WebSocketOperator.java index e007318fb..56927ce49 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/WebSocketOperator.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/WebSocketOperator.java @@ -1,20 +1,15 @@ package cn.stylefeng.roses.kernel.socket.websocket.operator; import cn.hutool.core.util.ObjectUtil; -import cn.stylefeng.roses.kernel.socket.api.message.SocketMsgCallbackInterface; import cn.stylefeng.roses.kernel.socket.api.SocketOperatorApi; -import cn.stylefeng.roses.kernel.socket.api.enums.ServerMessageTypeEnum; import cn.stylefeng.roses.kernel.socket.api.exception.SocketException; import cn.stylefeng.roses.kernel.socket.api.exception.enums.SocketExceptionEnum; -import cn.stylefeng.roses.kernel.socket.websocket.message.WebSocketMessagePOJO; -import cn.stylefeng.roses.kernel.socket.websocket.operator.channel.GettySocketOperator; -import cn.stylefeng.roses.kernel.socket.websocket.message.SocketMessageCenter; +import cn.stylefeng.roses.kernel.socket.api.message.SocketMsgCallbackInterface; import cn.stylefeng.roses.kernel.socket.api.session.pojo.SocketSession; +import cn.stylefeng.roses.kernel.socket.websocket.message.SocketMessageCenter; +import cn.stylefeng.roses.kernel.socket.websocket.operator.channel.GettySocketOperator; +import cn.stylefeng.roses.kernel.socket.websocket.pojo.WebSocketMessageDTO; import cn.stylefeng.roses.kernel.socket.websocket.session.SessionCenter; -import com.alibaba.fastjson.JSON; -import com.gettyio.expansion.handler.codec.websocket.frame.TextWebSocketFrame; - -import java.util.List; /** * WebSocket操作实现类 @@ -33,21 +28,21 @@ public class WebSocketOperator implements SocketOperatorApi { if (ObjectUtil.isEmpty(socketSession)) { throw new SocketException(SocketExceptionEnum.SESSION_NOT_EXIST); } - WebSocketMessagePOJO webSocketMessagePOJO = new WebSocketMessagePOJO(); - webSocketMessagePOJO.setData(msg); - webSocketMessagePOJO.setServerMsgType(msgType); + WebSocketMessageDTO webSocketMessageDTO = new WebSocketMessageDTO(); + webSocketMessageDTO.setData(msg); + webSocketMessageDTO.setServerMsgType(msgType); // 发送内容 - socketSession.getSocketOperatorApi().writeAndFlush(webSocketMessagePOJO); + socketSession.getSocketOperatorApi().writeAndFlush(webSocketMessageDTO); } @Override public void sendMsgOfAllUserSession(String msgType, Object msg) { for (SocketSession socketSession : SessionCenter.getSocketSessionMap().values()) { - WebSocketMessagePOJO webSocketMessagePOJO = new WebSocketMessagePOJO(); - webSocketMessagePOJO.setData(msg); - webSocketMessagePOJO.setServerMsgType(msgType); + WebSocketMessageDTO webSocketMessageDTO = new WebSocketMessageDTO(); + webSocketMessageDTO.setData(msg); + webSocketMessageDTO.setServerMsgType(msgType); // 发送内容 - socketSession.getSocketOperatorApi().writeAndFlush(webSocketMessagePOJO); + socketSession.getSocketOperatorApi().writeAndFlush(webSocketMessageDTO); } } diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/channel/GettySocketOperator.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/channel/GettySocketOperator.java index 4d1a5f1d4..0e2cbe4a3 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/channel/GettySocketOperator.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/operator/channel/GettySocketOperator.java @@ -1,6 +1,5 @@ package cn.stylefeng.roses.kernel.socket.websocket.operator.channel; -import cn.stylefeng.roses.kernel.socket.websocket.message.WebSocketMessagePOJO; import com.alibaba.fastjson.JSON; import com.gettyio.core.channel.SocketChannel; import com.gettyio.expansion.handler.codec.websocket.frame.TextWebSocketFrame; diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/WebSocketMessagePOJO.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/pojo/WebSocketMessageDTO.java similarity index 81% rename from kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/WebSocketMessagePOJO.java rename to kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/pojo/WebSocketMessageDTO.java index 4933b7342..d8c6ebbf7 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/message/WebSocketMessagePOJO.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/pojo/WebSocketMessageDTO.java @@ -1,4 +1,4 @@ -package cn.stylefeng.roses.kernel.socket.websocket.message; +package cn.stylefeng.roses.kernel.socket.websocket.pojo; import cn.stylefeng.roses.kernel.socket.api.SocketOperatorApi; import lombok.Data; @@ -9,15 +9,16 @@ import lombok.Data; * 特殊说明一下serverMsgType和clientMsgType的区别 * 1.serverMsgType字段是服务端发送给客户端的字段 * 例如:服务端发送一个系统消息(type:100001),客户端接收到该消息以后判断需不需要处理,不需要处理跳过即可 + *

* 2.clientMsgType字段是客户端发送给服务器的字段 * 例如:客户端发送给服务器一个心跳消息(type:299999),服务端如果需要处理该消息就注册一个该消息的监听器, - * 那么收到消息服务端会把消息推送给对应的监听器,接口见{@link SocketOperatorApi#msgTypeCallback} + * 那么收到消息服务端会把消息推送给对应的监听器,接口见{@link SocketOperatorApi#msgTypeCallback} * * @author majianguo * @date 2021/6/1 下午2:56 */ @Data -public class WebSocketMessagePOJO { +public class WebSocketMessageDTO { /** * 服务端发送的消息类型(客户端如果需要监听该消息类型,注册对应的消息处理器即可) @@ -40,7 +41,8 @@ public class WebSocketMessagePOJO { private String formUserId; /** - * 数据 + * 具体发送的数据 */ private Object data; + } diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/WebSocketInitializer.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/WebSocketInitializer.java index 15d3cd935..9a878fcae 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/WebSocketInitializer.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/WebSocketInitializer.java @@ -27,6 +27,6 @@ public class WebSocketInitializer extends ChannelInitializer { // 添加自定义的消息处理器 pipeline.addLast(new WebSocketMessageHandler()); - } + } diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/bind/ChannelIdAndUserBindCenter.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/bind/ChannelIdAndUserBindCenter.java index 8433a26e7..1ef954d5c 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/bind/ChannelIdAndUserBindCenter.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/bind/ChannelIdAndUserBindCenter.java @@ -19,13 +19,15 @@ public class ChannelIdAndUserBindCenter { /** * 通道和用户绑定关系映射 + *

+ * key是channelId通道id,value是userId */ - private static ConcurrentMap channelIdAndUserBind = new ConcurrentHashMap<>(); + private static final ConcurrentMap channelIdAndUserBind = new ConcurrentHashMap<>(); /** * 等待绑定的通道 */ - private static List waitingBindList = Collections.synchronizedList(new ArrayList<>()); + private static final List waitingBindList = Collections.synchronizedList(new ArrayList<>()); /** * 获取通道ID @@ -95,4 +97,5 @@ public class ChannelIdAndUserBindCenter { waitingBindList.removeIf(item -> item.getChannelId().equals(channelId)); channelIdAndUserBind.remove(channelId); } + } diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/handler/WebSocketMessageHandler.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/handler/WebSocketMessageHandler.java index 8e262836d..967b1cbe3 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/handler/WebSocketMessageHandler.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/server/handler/WebSocketMessageHandler.java @@ -3,12 +3,12 @@ package cn.stylefeng.roses.kernel.socket.websocket.server.handler; import cn.hutool.core.util.ObjectUtil; import cn.stylefeng.roses.kernel.socket.api.enums.ClientMessageTypeEnum; import cn.stylefeng.roses.kernel.socket.api.message.SocketMsgCallbackInterface; -import cn.stylefeng.roses.kernel.socket.websocket.message.SocketMessageCenter; import cn.stylefeng.roses.kernel.socket.api.session.pojo.SocketSession; -import cn.stylefeng.roses.kernel.socket.websocket.session.SessionCenter; -import cn.stylefeng.roses.kernel.socket.websocket.server.bind.ChannelIdAndUserBindCenter; +import cn.stylefeng.roses.kernel.socket.websocket.message.SocketMessageCenter; import cn.stylefeng.roses.kernel.socket.websocket.operator.channel.GettySocketOperator; -import cn.stylefeng.roses.kernel.socket.websocket.message.WebSocketMessagePOJO; +import cn.stylefeng.roses.kernel.socket.websocket.pojo.WebSocketMessageDTO; +import cn.stylefeng.roses.kernel.socket.websocket.server.bind.ChannelIdAndUserBindCenter; +import cn.stylefeng.roses.kernel.socket.websocket.session.SessionCenter; import com.alibaba.fastjson.JSON; import com.gettyio.core.channel.SocketChannel; import com.gettyio.core.pipeline.in.SimpleChannelInboundHandler; @@ -52,10 +52,10 @@ public class WebSocketMessageHandler extends SimpleChannelInboundHandler socketSession = new SocketSession<>(); - socketSession.setUserId(webSocketMessagePOJO.getFormUserId()); + socketSession.setUserId(webSocketMessageDTO.getFormUserId()); socketSession.setSocketOperatorApi(new GettySocketOperator(socketChannel)); socketSession.setConnectionTime(System.currentTimeMillis()); @@ -84,20 +84,21 @@ public class WebSocketMessageHandler extends SimpleChannelInboundHandler userSession = SessionCenter.getSessionByUserId(webSocketMessagePOJO.getFormUserId()); + SocketSession userSession = SessionCenter.getSessionByUserId(webSocketMessageDTO.getFormUserId()); userSession.setLastActiveTime(System.currentTimeMillis()); // 找到该消息的处理器 - SocketMsgCallbackInterface socketMsgCallbackInterface = SocketMessageCenter.getSocketMsgCallbackInterface(webSocketMessagePOJO.getClientMsgType()); + SocketMsgCallbackInterface socketMsgCallbackInterface = SocketMessageCenter.getSocketMsgCallbackInterface(webSocketMessageDTO.getClientMsgType()); if (ObjectUtil.isNotEmpty(socketMsgCallbackInterface)) { // 获取会话 - SocketSession session = SessionCenter.getSessionByUserId(webSocketMessagePOJO.getFormUserId()); + SocketSession session = SessionCenter.getSessionByUserId(webSocketMessageDTO.getFormUserId()); // 触发回调 - socketMsgCallbackInterface.callback(webSocketMessagePOJO.getClientMsgType(), webSocketMessagePOJO, session); + socketMsgCallbackInterface.callback(webSocketMessageDTO.getClientMsgType(), webSocketMessageDTO, session); } else { socketChannel.writeAndFlush(new TextWebSocketFrame("{\"code\":\"404\"}")); } } } + } diff --git a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/session/SessionCenter.java b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/session/SessionCenter.java index b8be35edf..cbc809767 100644 --- a/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/session/SessionCenter.java +++ b/kernel-d-socket/socket-sdk-websocket/src/main/java/cn/stylefeng/roses/kernel/socket/websocket/session/SessionCenter.java @@ -19,12 +19,11 @@ public class SessionCenter { /** * 所有会话维护 */ - private static ConcurrentMap> socketSessionMap = new ConcurrentHashMap<>(); + private static final ConcurrentMap> socketSessionMap = new ConcurrentHashMap<>(); /** * 获取维护的所有会话 * - * @return {@link ConcurrentMap< String, SocketSession>} * @author majianguo * @date 2021/6/1 下午2:13 **/ @@ -36,7 +35,6 @@ public class SessionCenter { * 根据用户ID获取会话详情 * * @param userId 用户ID - * @return {@link SocketSession } * @author majianguo * @date 2021/6/1 下午1:48 **/ @@ -65,4 +63,5 @@ public class SessionCenter { public static void closed(String userId) { socketSessionMap.remove(userId); } + } diff --git a/kernel-d-socket/socket-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/socket/starter/GunsSocketAutoConfiguration.java b/kernel-d-socket/socket-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/socket/starter/GunsSocketAutoConfiguration.java index 0b02ef54b..b5b6eead3 100644 --- a/kernel-d-socket/socket-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/socket/starter/GunsSocketAutoConfiguration.java +++ b/kernel-d-socket/socket-spring-boot-starter/src/main/java/cn/stylefeng/roses/kernel/socket/starter/GunsSocketAutoConfiguration.java @@ -42,7 +42,6 @@ public class GunsSocketAutoConfiguration { /** * Socket操作实现类 * - * @return {@link cn.stylefeng.roses.kernel.socket.api.SocketOperatorApi} * @author majianguo * @date 2021/6/2 下午5:48 **/