Procházet zdrojové kódy

feat:websocket支持

王智勇 před 4 roky
rodič
revize
7ae5213089

+ 1 - 0
README.md

@@ -50,6 +50,7 @@ RPC IM
 1. websocket连接成功后首先发送登录请求 然后 判断返回判断登录状态
 2. 根据类别判断要处理的消息类型进行展示
 3. 数据请求和返回都为字符串需用json进行解析
+4. 补充断线重连机制
 
 ##### 登录请求:
 

+ 0 - 1
dim-service/src/main/java/com/dzdy/dim/DimApplication.java

@@ -31,6 +31,5 @@ public class DimApplication implements CommandLineRunner {
     public void run(String... args) throws Exception{
         socketService.run();
         webSocketServer.run();
-        log.info("netty started .");
     }
 }

+ 3 - 13
dim-service/src/main/java/com/dzdy/dim/config/SocketService.java

@@ -44,21 +44,11 @@ public class SocketService {
                 // 是否关闭Nagle算法 true 高实时性,有消息立即发送 false 减少发送次数减少网络交互 提升性能(Nagle 算法)
                 .childOption(ChannelOption.TCP_NODELAY, true)
                 .childHandler(channelHandler);
-        bind(config.getPort());
-    }
-
-    /**
-     * 异步监听 绑定端口是否成功 并加大端口号继续绑定
-     *
-     * @param port
-     */
-    private void bind(int port) {
-        serverBootstrap.bind(port).addListener(future -> {
+        serverBootstrap.bind(config.getPort()).addListener(future -> {
             if (future.isSuccess()) {
-                log.info("netty port [" + port + "] bind success . ");
+                log.info("socket service port [" + config.getPort() + "] bind success . ");
             } else {
-                log.info("netty port [" + port + "] bind failure .");
-                bind(port + 1);
+                log.error("socket service port [" + config.getPort() + "] bind failure .");
             }
         });
     }

+ 2 - 0
dim-service/src/main/java/com/dzdy/dim/config/WebSocketConfig.java

@@ -1,5 +1,6 @@
 package com.dzdy.dim.config;
 
+import com.dzdy.dim.handler.IMIdleStateHandler;
 import com.dzdy.dim.handler.websocket.WebSocketIndexPageHandler;
 import com.dzdy.dim.handler.websocket.WebSocketPacketCodecHandler;
 import com.dzdy.dim.handler.websocket.WebSocketSocketDateHandler;
@@ -100,6 +101,7 @@ public class WebSocketConfig {
                 if (sslCtx != null) {
                     pipeline.addLast(sslCtx.newHandler(ch.alloc()));
                 }
+                pipeline.addLast(new IMIdleStateHandler());
                 pipeline.addLast(new HttpServerCodec());
                 pipeline.addLast(new HttpObjectAggregator(65536));
                 pipeline.addLast(new WebSocketServerProtocolHandler(websocketPath, null, true));

+ 7 - 1
dim-service/src/main/java/com/dzdy/dim/config/WebSocketServer.java

@@ -37,7 +37,13 @@ public class WebSocketServer {
         webServerBootstrap.group(webBossGroup, webWorkerGroup)
                 .channel(NioServerSocketChannel.class)
                 .childHandler(webChannelHandler);
-        Channel channel = webServerBootstrap.bind(config.getPort()).sync().channel();
+        Channel channel = webServerBootstrap.bind(config.getPort()).addListener(future -> {
+            if (future.isSuccess()) {
+                log.info("websocket service port [{}] bind success . ", config.getPort());
+            } else {
+                log.error("websocket service port [{}] bind failure .", config.getPort());
+            }
+        }).sync().channel();
         log.info("Open your web browser and navigate to " + "http://127.0.0.1:" + config.getPort() + '/');
         channel.closeFuture().sync();
     }