Commit 2f6fd7c7 authored by p x's avatar p x
Browse files

根据前端的type 传参推送不同的数据

parent 3d2834bf
......@@ -39,7 +39,7 @@ dependencies {
// https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2
implementation("com.alibaba.fastjson2:fastjson2:2.0.60")
// https://mvnrepository.com/artifact/io.netty/netty-all
implementation("io.netty:netty-all:4.2.9.Final")
implementation("io.netty:netty-all:4.1.92.Final")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
}
......
......@@ -109,3 +109,392 @@
2026-01-07 16:38:20 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-07 16:38:20 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-07 16:38:20 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 0.98 seconds (process running for 1.318)
2026-01-08 14:09:40 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 26336 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 14:09:40 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 14:09:41 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 14:09:41 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 14:09:41 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 14:09:42 [DefaultDispatcher-worker-2] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 14:09:42 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 3.068 seconds (process running for 3.644)
2026-01-08 14:11:06 [DefaultDispatcher-worker-2] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 14:11:06 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 14:13:08 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 21520 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 14:13:08 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 14:13:09 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 14:13:09 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 14:13:09 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 14:13:09 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 14:13:09 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.49 seconds (process running for 2.437)
2026-01-08 14:13:50 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 14:13:50 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 14:41:16 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 34628 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 14:41:16 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 14:41:16 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 14:41:16 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 14:41:16 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 14:41:17 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 14:41:17 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.121 seconds (process running for 1.413)
2026-01-08 14:41:27 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 14:41:27 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 14:57:09 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 2972 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 14:57:09 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 14:57:09 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 14:57:09 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 14:57:09 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 14:57:09 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 14:57:09 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.031 seconds (process running for 1.314)
2026-01-08 14:58:22 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 14:58:22 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 14:58:28 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 33812 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 14:58:28 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 14:58:28 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 14:58:28 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 14:58:28 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 14:58:28 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 14:58:28 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.034 seconds (process running for 1.298)
2026-01-08 15:01:04 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:01:04 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:01:09 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 16400 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:01:09 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:01:10 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:01:10 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:01:10 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:01:10 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:01:10 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.069 seconds (process running for 1.441)
2026-01-08 15:03:32 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:03:32 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:03:36 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 1972 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:03:36 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:03:37 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:03:37 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:03:37 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:03:37 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:03:37 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.133 seconds (process running for 1.407)
2026-01-08 15:04:05 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:04:05 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:04:27 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 34796 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:04:27 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:04:27 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:04:27 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:04:27 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:04:27 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:04:28 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.027 seconds (process running for 1.305)
2026-01-08 15:05:55 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:05:55 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:05:59 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 28500 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:05:59 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:05:59 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:05:59 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:05:59 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:05:59 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:05:59 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.023 seconds (process running for 1.286)
2026-01-08 15:07:34 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:07:34 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:07:39 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 27644 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:07:39 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:07:39 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:07:39 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:07:39 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:07:39 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:07:39 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.098 seconds (process running for 1.378)
2026-01-08 15:09:28 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:09:28 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:09:33 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 29068 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:09:33 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:09:33 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:09:33 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:09:33 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:09:33 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:09:34 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.039 seconds (process running for 1.315)
2026-01-08 15:15:25 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:15:25 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:15:29 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 22736 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:15:29 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:15:30 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:15:30 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:15:30 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:15:30 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:15:30 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.303 seconds (process running for 1.805)
2026-01-08 15:16:37 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:16:37 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:17:04 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 23492 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:17:04 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:17:04 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:17:04 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:17:04 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:17:05 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:17:05 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.076 seconds (process running for 1.376)
2026-01-08 15:17:24 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:17:24 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:17:39 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 17704 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:17:39 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:17:39 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:17:39 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:17:39 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:17:39 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:17:40 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.095 seconds (process running for 1.362)
2026-01-08 15:18:07 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:18:07 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:19:42 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 15948 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:19:42 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:19:43 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:19:43 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:19:43 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:19:43 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:19:43 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.093 seconds (process running for 1.377)
2026-01-08 15:20:02 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:20:02 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:28:22 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 18868 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:28:22 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:28:23 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:28:23 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:28:23 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:28:23 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:28:23 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.112 seconds (process running for 1.397)
2026-01-08 15:28:26 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead0 - 解析请求参数成功: {type=1}, 请求路径: /gs-guide-websocket?type=1, 请求方法: GET
2026-01-08 15:29:36 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:29:36 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:29:43 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 31228 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:29:43 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:29:44 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:29:44 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:29:44 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:29:44 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:29:44 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.099 seconds (process running for 1.366)
2026-01-08 15:29:51 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead0 - 解析请求参数成功: {}, 请求路径: /gs-guide-websocket, 请求方法: GET
2026-01-08 15:29:56 [nioEventLoopGroup-3-2] INFO com.inzy.wsmock.RequestParamHandler.channelRead0 - 解析请求参数成功: {type=1}, 请求路径: /gs-guide-websocket?type=1, 请求方法: GET
2026-01-08 15:30:10 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:30:10 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:43:03 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 26956 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:43:03 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:43:04 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:43:04 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:43:04 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:43:04 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:43:04 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.088 seconds (process running for 1.377)
2026-01-08 15:43:20 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:43:20 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:43:23 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 8984 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:43:23 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:43:23 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:43:23 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:43:23 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:43:24 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:43:24 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.119 seconds (process running for 1.389)
2026-01-08 15:43:34 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:43:34 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:44:36 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 31680 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:44:36 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:44:37 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:44:37 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:44:37 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:44:37 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:44:37 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.163 seconds (process running for 1.453)
2026-01-08 15:52:59 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:52:59 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:53:12 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 20628 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:53:12 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:53:12 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:53:12 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:53:12 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:53:13 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:53:13 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.081 seconds (process running for 1.365)
2026-01-08 15:53:21 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead - 解析WS握手参数:{type=1},URI:/gs-guide-websocket?type=1
2026-01-08 15:53:42 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:53:42 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 15:54:45 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 15308 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 15:54:45 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 15:54:46 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 15:54:46 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 15:54:46 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 15:54:46 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 15:54:46 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.083 seconds (process running for 1.362)
2026-01-08 15:54:50 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead - 解析WS握手参数:{type=1},URI:/gs-guide-websocket?type=1
2026-01-08 15:54:59 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 15:54:59 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:05:00 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 2940 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:05:00 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:05:01 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:05:01 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:05:01 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:05:01 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:05:01 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.115 seconds (process running for 1.434)
2026-01-08 16:05:28 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:05:28 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead - 解析WS握手参数:{type=1},URI:/gs-guide-websocket?type=1
2026-01-08 16:06:28 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:06:28 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:06:46 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 10196 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:06:46 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:06:46 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:06:46 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:06:46 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:06:46 [main] WARN o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext.refresh - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'nettyWebSocketServer' defined in file [D:\JavaWorkSpace\wsmock\build\classes\kotlin\main\com\inzy\wsmock\NettyWebSocketServer.class]: Unsatisfied dependency expressed through constructor parameter 1: No qualifying bean of type 'com.inzy.wsmock.WebSocketHandler' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2026-01-08 16:06:46 [main] INFO o.a.catalina.core.StandardService.log - Stopping service [Tomcat]
2026-01-08 16:06:46 [main] ERROR o.s.b.d.LoggingFailureAnalysisReporter.report -
***************************
APPLICATION FAILED TO START
***************************
Description:
Parameter 1 of constructor in com.inzy.wsmock.NettyWebSocketServer required a bean of type 'com.inzy.wsmock.WebSocketHandler' that could not be found.
Action:
Consider defining a bean of type 'com.inzy.wsmock.WebSocketHandler' in your configuration.
2026-01-08 16:07:00 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 33844 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:07:00 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:07:01 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:07:01 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:07:01 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:07:01 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:07:01 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.034 seconds (process running for 1.289)
2026-01-08 16:07:16 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:07:16 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:07:19 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 19464 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:07:19 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:07:20 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:07:20 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:07:20 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:07:20 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:07:20 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 0.97 seconds (process running for 1.231)
2026-01-08 16:07:37 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:07:37 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead - 解析WS握手参数:{type=1},URI:/gs-guide-websocket?type=1
2026-01-08 16:11:31 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:11:31 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:11:34 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 24856 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:11:34 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:11:35 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:11:35 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:11:35 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:11:35 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:11:35 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.054 seconds (process running for 1.325)
2026-01-08 16:11:51 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:11:51 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.RequestParamHandler.channelRead - 解析WS握手参数:{type=1},URI:/gs-guide-websocket?type=1
2026-01-08 16:17:57 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:17:57 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:18:11 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 10748 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:18:11 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:18:12 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:18:12 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:18:12 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:18:12 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:18:12 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 0.981 seconds (process running for 1.246)
2026-01-08 16:18:32 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:18:32 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端参数:null
2026-01-08 16:25:43 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:25:43 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:25:46 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 1860 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:25:46 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:25:47 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:25:47 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:25:47 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:25:47 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:25:47 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.12 seconds (process running for 1.394)
2026-01-08 16:25:52 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:25:52 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:25:55 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 17364 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:25:55 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:25:55 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:25:55 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:25:56 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:25:56 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:25:56 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.048 seconds (process running for 1.316)
2026-01-08 16:26:02 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:26:02 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端参数:null
2026-01-08 16:26:29 [nioEventLoopGroup-3-2] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:26:29 [nioEventLoopGroup-3-2] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端参数:null
2026-01-08 16:33:58 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:33:58 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:34:07 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 9576 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:34:07 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:34:07 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:34:07 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:34:07 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:34:08 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:34:08 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 0.967 seconds (process running for 1.242)
2026-01-08 16:34:12 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:34:12 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:34:16 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 20944 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:34:16 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:34:16 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:34:16 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:34:16 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:34:16 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:34:17 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 0.955 seconds (process running for 1.232)
2026-01-08 16:34:24 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:34:47 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:34:47 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:34:50 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 20968 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:34:50 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:34:51 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:34:51 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:34:51 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:34:51 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:34:51 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 0.95 seconds (process running for 1.206)
2026-01-08 16:34:56 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:34:56 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=1} 请求路径:/gs-guide-websocket
2026-01-08 16:35:12 [nioEventLoopGroup-3-2] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:35:35 [nioEventLoopGroup-3-3] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:35:35 [nioEventLoopGroup-3-3] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=2} 请求路径:/gs-guide-websocket
2026-01-08 16:36:09 [nioEventLoopGroup-3-4] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:51:03 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:51:03 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:51:06 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 2488 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:51:06 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:51:07 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:51:07 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:51:07 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:51:07 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:51:07 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.018 seconds (process running for 1.291)
2026-01-08 16:51:16 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:51:26 [nioEventLoopGroup-3-2] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:51:26 [nioEventLoopGroup-3-2] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=2} 请求路径:/gs-guide-websocket
2026-01-08 16:51:36 [nioEventLoopGroup-3-3] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:51:36 [nioEventLoopGroup-3-3] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=1} 请求路径:/gs-guide-websocket
2026-01-08 16:55:20 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 16:55:20 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:55:26 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 21692 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 16:55:26 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 16:55:26 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 16:55:26 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 16:55:26 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 16:55:27 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 16:55:27 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.212 seconds (process running for 1.884)
2026-01-08 16:55:39 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 16:55:39 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=1} 请求路径:/gs-guide-websocket
2026-01-08 16:56:05 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 16:56:05 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 17:04:10 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 1092 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 17:04:10 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 17:04:11 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 17:04:11 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 17:04:11 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 17:04:11 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 17:04:11 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.052 seconds (process running for 1.322)
2026-01-08 17:04:23 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:04:23 [nioEventLoopGroup-3-1] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=1} 请求路径:/gs-guide-websocket
2026-01-08 17:05:13 [nioEventLoopGroup-3-2] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:05:13 [nioEventLoopGroup-3-2] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=2} 请求路径:/gs-guide-websocket
2026-01-08 17:06:32 [nioEventLoopGroup-3-3] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:06:32 [nioEventLoopGroup-3-3] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=2} 请求路径:/gs-guide-websocket
2026-01-08 17:06:35 [nioEventLoopGroup-3-4] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:06:35 [nioEventLoopGroup-3-4] INFO com.inzy.wsmock.WebSocketHandler.userEventTriggered - WS握手成功,客户端查询参数:{type=3} 请求路径:/gs-guide-websocket
2026-01-08 17:07:00 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 17:07:00 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
2026-01-08 17:07:15 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarting - Starting WsmockApplicationKt using Java 17.0.15 with PID 29808 (D:\JavaWorkSpace\wsmock\build\classes\kotlin\main started by Administrator in D:\JavaWorkSpace\wsmock)
2026-01-08 17:07:15 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStartupProfileInfo - No active profile set, falling back to 1 default profile: "default"
2026-01-08 17:07:16 [main] INFO o.a.catalina.core.StandardService.log - Starting service [Tomcat]
2026-01-08 17:07:16 [main] INFO o.a.catalina.core.StandardEngine.log - Starting Servlet engine: [Apache Tomcat/10.1.50]
2026-01-08 17:07:16 [main] INFO o.a.c.c.C.[Tomcat].[localhost].[/].log - Initializing Spring embedded WebApplicationContext
2026-01-08 17:07:16 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty WebSocket服务启动成功,端口:8089
2026-01-08 17:07:16 [main] INFO com.inzy.wsmock.WsmockApplicationKt.logStarted - Started WsmockApplicationKt in 1.037 seconds (process running for 1.315)
2026-01-08 17:07:26 [nioEventLoopGroup-3-1] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:07:27 [nioEventLoopGroup-3-2] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:07:29 [nioEventLoopGroup-3-3] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:07:38 [nioEventLoopGroup-3-4] INFO c.inzy.wsmock.NettyWebSocketServer.initChannel - ChannelPipeline顺序:[Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry, Entry]
2026-01-08 17:17:27 [SpringApplicationShutdownHook] INFO c.inzy.wsmock.NettyWebSocketServer.stop - Netty WebSocket服务已关闭
2026-01-08 17:17:27 [DefaultDispatcher-worker-1] INFO c.inzy.wsmock.NettyWebSocketServer.invokeSuspend - Netty线程组已关闭
package com.inzy.wsmock
import io.netty.channel.Channel
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
import io.netty.util.AttributeKey
import java.util.concurrent.ConcurrentHashMap
/**
* Channel 全局管理类(单例)
* 统一管理在线客户端Channel,提供增删查、分组等操作
*/
class ChannelManager private constructor() {
// 存储在线客户端Channel(线程安全)
private val onlineChannels = ConcurrentHashMap<String, Channel>()
/**
* 添加Channel(客户端连接时调用)
*/
fun addChannel(channel: Channel) {
val clientId = channel.id().asShortText()
onlineChannels[clientId] = channel
println("Channel添加成功:$clientId,当前在线数:${onlineChannels.size}")
}
/**
* 移除Channel(客户端断开/异常时调用)
*/
fun removeChannel(channel: Channel) {
val clientId = channel.id().asShortText()
onlineChannels.remove(clientId)
println("Channel移除成功:$clientId,当前在线数:${onlineChannels.size}")
}
/**
* 根据客户端ID获取Channel
*/
fun getChannel(clientId: String): Channel? {
return onlineChannels[clientId]
}
/**
* 获取所有在线Channel
*/
fun getAllChannels(): ConcurrentHashMap<String, Channel> {
return onlineChannels // 返回原对象(ConcurrentHashMap线程安全),或返回副本:ConcurrentHashMap(onlineChannels)
}
/**
* 根据Channel的attr属性(CLIENT_TYPE_KEY)分组
*/
fun groupChannelByType(typeKey: AttributeKey<String>): Map<String, List<Channel>> {
val groupMap = mutableMapOf<String, MutableList<Channel>>()
onlineChannels.forEach { (_, channel) ->
// 获取Channel的type属性,默认值为"default"
val type = channel.attr(typeKey).get() ?: "default"
if (!groupMap.containsKey(type)) {
groupMap[type] = mutableListOf()
}
// 仅保留活跃的Channel
if (channel.isActive) {
groupMap[type]?.add(channel)
}
}
return groupMap
}
/***发送过滤好的通道**/
fun sendMsgFromType(typeChannels: Map<String, Channel>,msg: String) {
if (typeChannels.isEmpty()) {
// println("无在线客户端,跳过推送")
return
}
val frame = TextWebSocketFrame(msg)
typeChannels.forEach { (clientId, channel) ->
if (channel.isActive) {
channel.writeAndFlush(frame)
.addListener { future ->
if (!future.isSuccess) {
println("推送消息给客户端[$clientId]失败:${future.cause()?.message}")
removeChannel(channel) // 推送失败移除失效Channel
}
}
} else {
removeChannel(channel) // 移除非活跃Channel
}
}
}
/**
* 广播消息给所有在线客户端
*/
/* fun broadcastMsg(msg: String) {
if (onlineChannels.isEmpty()) {
println("无在线客户端,跳过推送")
return
}
val frame = TextWebSocketFrame(msg)
onlineChannels.forEach { (clientId, channel) ->
if (channel.isActive) {
channel.writeAndFlush(frame)
.addListener { future ->
if (!future.isSuccess) {
println("推送消息给客户端[$clientId]失败:${future.cause()?.message}")
removeChannel(channel) // 推送失败移除失效Channel
}
}
} else {
removeChannel(channel) // 移除非活跃Channel
}
}
println("已向${onlineChannels.size}个客户端推送消息:$msg")
}*/
/**
* 单例模式(饿汉式)
*/
companion object {
val instance: ChannelManager = ChannelManager()
}
}
\ No newline at end of file
......@@ -16,17 +16,25 @@ import jakarta.annotation.PreDestroy
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import lombok.extern.slf4j.Slf4j
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Component
import java.net.BindException
import java.net.InetSocketAddress
import java.net.ServerSocket
@Slf4j
@Component
class NettyWebSocketServer(
@Value("\${netty.websocket.port:8089}") private val port: Int,
private val webSocketHandler: WebSocketHandler
@Value("\${netty.websocket.port:8089}") private val port: Int
// private val webSocketHandler: WebSocketHandler
) {
private val logger = LoggerFactory.getLogger(javaClass)
private val websocketPath="/gs-guide-websocket"
// Netty主从线程组
private val bossGroup = NioEventLoopGroup(1)
private val workerGroup = NioEventLoopGroup()
......@@ -53,10 +61,28 @@ class NettyWebSocketServer(
pipeline.addLast(HttpServerCodec())
pipeline.addLast(ChunkedWriteHandler())
pipeline.addLast(HttpObjectAggregator(1024 * 1024))
pipeline.addLast(WebSocketServerProtocolHandler("/gs-guide-websocket"))
pipeline.addLast(webSocketHandler)
pipeline.addLast(RequestParamHandler()) // 添加HTTP请求拦截器
pipeline.addLast(WebSocketServerProtocolHandler(websocketPath))
pipeline.addLast(WebSocketHandler())
// 调试:打印处理器链顺序,确认RequestParamHandler在正确位置
// logger.info("ChannelPipeline顺序:${pipeline.map { it.javaClass.simpleName }}")
}
})
// 检测端口是否被占用
val isPortAvailable = InetSocketAddress(port).let {
ServerSocket().use { socket ->
try {
socket.bind(it)
true
} catch (e: BindException) {
false
}
}
}
if (!isPortAvailable) {
logger.error("端口$port 已被占用,启动失败!")
return@launch
}
// 绑定端口并启动(非阻塞?不,这里sync()只阻塞当前新线程,不阻塞Spring主线程)
serverChannelFuture = bootstrap.bind(port).sync()
logger.info("Netty WebSocket服务启动成功,端口:$port")
......
package com.inzy.wsmock
import io.netty.channel.ChannelHandlerContext
import io.netty.channel.SimpleChannelInboundHandler
import io.netty.handler.codec.http.FullHttpRequest
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
import io.netty.util.AttributeKey
class RequestParamHandler : SimpleChannelInboundHandler<TextWebSocketFrame?>() {
// 定义存储查询参数的AttributeKey(全局复用)
companion object {
val REQUEST_PARAMS_KEY = AttributeKey.valueOf<Map<String, String>>("REQUEST_PARAMS")
val REQUEST_PATH_KEY = AttributeKey.valueOf<String>("REQUEST_PATH") // 存储请求路径
val PARAM_TYPE_KEY = "type"
val PARAM_TYPE_VALUE_1 = "1"
val PARAM_TYPE_VALUE_2 = "2"
}
@Throws(Exception::class)
override fun channelRead(ctx: ChannelHandlerContext, msg: Any) {
if (msg is FullHttpRequest) {
val request = msg
val uri = request.uri()
// 1. 解析请求路径和查询参数
val (path, params) = parseUri(uri)
// 2. 打印调试信息
// println("请求路径: $path")
// println("查询参数: $params")
// 3. 将路径和参数存入Channel属性(供后续处理器使用)
ctx.channel().attr(REQUEST_PATH_KEY).set(path)
ctx.channel().attr(REQUEST_PARAMS_KEY).set(params)
// 4. 可选:去除查询参数后更新请求URI(不影响后续处理器解析路径)
request.uri = path
// 去除查询参数后更新URI(可选)
/* if (uri.contains("?")) {
val newUri = uri.substring(0, uri.indexOf("?"))
request.setUri(newUri)
}*/
}
// 处理WebSocket消息
super.channelRead(ctx, msg)
}
@Throws(Exception::class)
override fun channelRead0(ctx: ChannelHandlerContext?, msg: TextWebSocketFrame?) {
}
// 核心方法:解析URI,返回 Pair(路径, 参数字典)
private fun parseUri(uri: String): Pair<String, Map<String, String>> {
// 分割路径和参数(? 是分隔符)
val splitIndex = uri.indexOf("?")
return if (splitIndex == -1) {
// 无查询参数的情况
Pair(uri, emptyMap())
} else {
// 有查询参数的情况:解析路径 + 解析参数
val path = uri.substring(0, splitIndex)
val paramStr = uri.substring(splitIndex + 1)
val params = parseParams(paramStr)
Pair(path, params)
}
}
// 解析查询参数字符串(a=1&b=2 形式)
private fun parseParams(paramStr: String): Map<String, String> {
val params = mutableMapOf<String, String>()
if (paramStr.isBlank()) return params
// 按 & 分割多个参数
val paramArray = paramStr.split("&").filter { it.isNotBlank() }
for (param in paramArray) {
// 按 = 分割参数名和值
val keyValue = param.split("=", limit = 2) // limit=2 避免值包含=的情况
if (keyValue.size == 2) {
val key = keyValue[0].trim()
val value = keyValue[1].trim()
params[key] = value
}
}
return params
}
// 自定义方法:解析URL参数
/* private fun getUrlParams(url: String): MutableMap<String?, String?> {
var url = url
val map: MutableMap<String?, String?> = HashMap<String?, String?>()
url = url.replace("?", ";")
if (!url.contains(";")) return map
val arr = url.split(";".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()[1].split("&".toRegex())
.dropLastWhile { it.isEmpty() }.toTypedArray()
for (s in arr) {
val pair = s.split("=".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
if (pair.size == 2) {
map.put(pair[0], pair[1])
}
}
return map
}*/
}
package com.inzy.wsmock
import com.alibaba.fastjson2.JSONObject
import com.inzy.wsmock.RequestParamHandler.Companion.PARAM_TYPE_KEY
import com.inzy.wsmock.RequestParamHandler.Companion.PARAM_TYPE_VALUE_1
import com.inzy.wsmock.RequestParamHandler.Companion.PARAM_TYPE_VALUE_2
import com.inzy.wsmock.RequestParamHandler.Companion.REQUEST_PARAMS_KEY
import io.netty.channel.Channel
import lombok.extern.slf4j.Slf4j
import org.slf4j.LoggerFactory
import org.springframework.scheduling.annotation.Scheduled
import org.springframework.stereotype.Component
import java.time.LocalDateTime
@Slf4j
@Component
class ScheduledPushTask(
private val webSocketHandler: WebSocketHandler,
private val pushConfig: PushConfig
// private val webSocketHandler: WebSocketHandler,
// private val pushConfig: PushConfig
) {
private val logger = LoggerFactory.getLogger(javaClass)
// 注入ChannelManager单例
private val channelManager = ChannelManager.instance
/**
* 定时推送任务(固定延迟,避免任务叠加
* 定时推送任务(type=1
*/
@Scheduled(fixedDelayString = "#{@pushConfig.pushInterval}")
fun pushMsgToType1() {
// val onlineChannels = channelManager.getAllChannels()
//得到设置了type属性的channel
val typeChannels=filterTypeChannels(PARAM_TYPE_VALUE_1)
// println("onlineChannels.size = ${onlineChannels.size} typeChannels.size = ${typeChannels.size}")
val msgObj = JSONObject()
msgObj["content"] = "定时推送消息 type=1 ${LocalDateTime.now()}"
channelManager.sendMsgFromType(typeChannels,msgObj.toJSONString())
}
@Scheduled(fixedDelayString = "200")
fun pushMsgToType2() {
//得到设置了type属性的channel
val typeChannels=filterTypeChannels(PARAM_TYPE_VALUE_2)
// println("onlineChannels.size = ${onlineChannels.size} typeChannels.size = ${typeChannels.size}")
val msgObj = JSONObject()
msgObj["content"] = "定时推送消息 type=2 ${LocalDateTime.now()}"
channelManager.sendMsgFromType(typeChannels,msgObj.toJSONString())
}
/**
* @param type 前端的查询参数
* **/
private fun filterTypeChannels(type: String): Map<String, Channel> {
val onlineChannels = channelManager.getAllChannels()
//得到设置了type属性的channel
val typeChannels =
onlineChannels.filter { (id, channel) ->
if (channel.hasAttr(REQUEST_PARAMS_KEY)) {
val params = channel.attr(REQUEST_PARAMS_KEY).get()
return@filter params.get(PARAM_TYPE_KEY) == type
}
false
}
return typeChannels
}
/**
* 定时推送任务(固定延迟,避免任务叠加)
*/
// @Scheduled(fixedDelayString = "#{@pushConfig.pushInterval}")
fun pushMsgToClients() {
// 增加日志,确认函数是否执行
// logger.info("定时推送任务开始执行 - ${LocalDateTime.now()}")
......@@ -28,11 +80,22 @@ class ScheduledPushTask(
// if (!pushConfig.pushEnabled.get()) {
// return
// }
val onlineChannels = channelManager.getAllChannels()
// if (onlineChannels.isEmpty()) {
//// println("定时推送:无在线客户端,跳过")
// return
// }
//得到设置了type属性的channel
// val typeChannels =
// onlineChannels.filter { (id, channel) -> channel.hasAttr(WebSocketHandler.WS_QUERY_PARAMS_KEY) }
// println("onlineChannels.size = ${onlineChannels.size} typeChannels.size = ${typeChannels.size}")
// 构造推送消息(适配前端格式)
val msgObj = JSONObject()
msgObj["content"] = "定时推送消息 - ${LocalDateTime.now()}"
logger.debug("msgObj = ${msgObj}")
// 广播给所有客户端
webSocketHandler.broadcastMsg(msgObj.toJSONString())
// webSocketHandler.broadcastMsg(msgObj.toJSONString())
}
}
\ No newline at end of file
package com.inzy.wsmock
import io.netty.channel.Channel
import io.netty.channel.ChannelHandler.Sharable
import io.netty.channel.ChannelHandlerContext
import io.netty.channel.SimpleChannelInboundHandler
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame
import io.netty.handler.codec.http.websocketx.WebSocketFrame
import org.springframework.stereotype.Component
import java.util.concurrent.ConcurrentHashMap
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler
import org.slf4j.LoggerFactory
/**
* 自定义WebSocket处理器(支持多客户端
* 自定义WebSocket处理器(专注处理消息交互,Channel管理交给ChannelManager
*/
@Sharable
@Component
//@Component
class WebSocketHandler : SimpleChannelInboundHandler<WebSocketFrame>() {
// 存储在线客户端Channel(线程安全)
private val onlineChannels = ConcurrentHashMap<String, Channel>()
// private val logger = LoggerFactory.getLogger(javaClass)
// 注入ChannelManager单例
private val channelManager = ChannelManager.instance
// 监听握手成功事件(此时RequestParamHandler已解析参数)
override fun userEventTriggered(ctx: ChannelHandlerContext, evt: Any) {
if (evt is WebSocketServerProtocolHandler.HandshakeComplete) {
val channel = ctx.channel()
// 交给ChannelManager管理
channelManager.addChannel(channel)
// 握手成功后读取参数(此时参数已存储)
// val params = ctx.channel().attr(RequestParamHandler.REQUEST_PARAMS_KEY).get()
// val path = ctx.channel().attr(RequestParamHandler.REQUEST_PATH_KEY).get()
// logger.info("WS握手成功,客户端查询参数:$params 请求路径:$path")
ctx.writeAndFlush(TextWebSocketFrame("Welcome!"))
// ctx.writeAndFlush(TextWebSocketFrame("Welcome! Client ID: $clientId, params: $params"))
}
super.userEventTriggered(ctx, evt)
}
/**
* 客户端连接成功
*/
override fun channelActive(ctx: ChannelHandlerContext) {
/* override fun channelActive(ctx: ChannelHandlerContext) {
val channel = ctx.channel()
val clientId = channel.id().asShortText()
onlineChannels[clientId] = channel
println("客户端连接成功:$clientId,当前在线数:${onlineChannels.size}")
// 交给ChannelManager管理
channelManager.addChannel(channel)
// val type = ctx.channel().attr(RequestParamHandler.REQUEST_PARAMS_KEY).get()
// println("当前连接的客户端type:$type")
// 欢迎消息
channel.writeAndFlush(TextWebSocketFrame("Welcome! Client ID: $clientId"))
}
}*/
/**
* 客户端断开连接
*/
override fun channelInactive(ctx: ChannelHandlerContext) {
val channel = ctx.channel()
val clientId = channel.id().asShortText()
onlineChannels.remove(clientId)
println("客户端断开连接:$clientId,当前在线数:${onlineChannels.size}")
// 交给ChannelManager管理
channelManager.removeChannel(channel)
}
/**
* 处理客户端消息
*/
override fun channelRead0(ctx: ChannelHandlerContext, frame: WebSocketFrame) {
if (frame is TextWebSocketFrame) {
/* if (frame is TextWebSocketFrame) {
val msg = frame.text()
val clientId = ctx.channel().id().asShortText()
println("收到客户端[$clientId]消息:$msg")
// 回复客户端
ctx.writeAndFlush(TextWebSocketFrame("Server received: $msg"))
}
}*/
}
/**
* 异常处理
*/
override fun exceptionCaught(ctx: ChannelHandlerContext, cause: Throwable) {
val clientId = ctx.channel().id().asShortText()
val channel = ctx.channel()
val clientId = channel.id().asShortText()
println("客户端[$clientId]发生异常:${cause.message}")
ctx.close()
onlineChannels.remove(clientId)
// 交给ChannelManager移除失效Channel
channelManager.removeChannel(channel)
}
/**
* 广播消息给所有在线客户端
* 广播消息(复用ChannelManager的实现)
*/
fun broadcastMsg(msg: String) {
if (onlineChannels.isEmpty()) {
println("无在线客户端,跳过推送")
return
}
val frame = TextWebSocketFrame(msg)
onlineChannels.forEach { (clientId, channel) ->
if (channel.isActive) {
channel.writeAndFlush(frame)
.addListener { future ->
if (!future.isSuccess) {
println("推送消息给客户端[$clientId]失败:${future.cause()?.message}")
}
}
} else {
onlineChannels.remove(clientId)
}
}
println("已向${onlineChannels.size}个客户端推送消息:$msg")
}
/* fun broadcastMsg(msg: String) {
channelManager.broadcastMsg(msg)
}*/
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment