netty"/>
[netty
简介
这是一个轻量级、高性能的基于 Netty 的 WebSocket 框架,提升你的 WebSocket 开发体验,为 Spring Boot 带来全新的 WebSocket 功能。 该项目使你可以轻松集成 WebSocket 到你的 Spring Boot 项目中,提供了 Tomcat WebSocket 的简单性,同时享受 Netty 性能和可扩展性的优势。
主要特点:
- 无缝集成Spring Boot
- 轻量级和高性能
- 简化实时应用程序开发
- 基于强大的Netty框架构建
在项目中添加依赖
<dependency><groupId>io.github.avidbyte</groupId><artifactId>netty-websocket-boot-starter</artifactId><version>1.0.1</version></dependency>
新增 websocket 服务类
@Slf4j
@Service
@ServerEndpoint("/chat/text")
public class TextWebSocket {private static final Map<String, Session> CLIENTS = new ConcurrentHashMap<>();@BeforeHandshakepublic void handshake(Session session, HttpHeaders headers) {String token = headers.get("token");System.out.println("token:" + token);}@OnOpenpublic void onOpen(@PathParam("username") String username, Session session) {if (!StringUtils.hasLength(username)) {log.error("username is empty");return;}log.info("username={}", username);session.setAttribute("name", username);CLIENTS.put(username, session);}@OnClosepublic void onClose(Session session){String name = session.getAttribute("name");CLIENTS.remove(name);session.close();}@OnMessagepublic void onMessage(Session session, String message){log.info("message={}", message);String ping = "ping";if (ping.equals(message)) {session.sendText("pong");}}@OnEventpublic void onEvent(Session session, Object evt) {if (evt instanceof IdleStateEvent) {IdleStateEvent idleStateEvent = (IdleStateEvent) evt;switch (idleStateEvent.state()) {case READER_IDLE:log.info("read idle");break;case WRITER_IDLE:log.info("write idle");break;case ALL_IDLE:log.info("all idle");break;default:break;}}}@OnErrorpublic void onError(Session session, Throwable error){String name = session.getAttribute("name");log.error("A communication error occurred and the connection was closed = {}", name);CLIENTS.remove(name);session.close();}public void sendMessageTo(String message, Session session) {session.sendText(message);}public void sendMessageAll(String message) {for (Session session : CLIENTS.values()) {session.sendText(message);}}}
只需两步,这样就集成好了。
启动服务
websocket-my-netty-server | 2023-10-19 10:01:02 | INFO | main | org.avidbytety.websocket.server.NettyWebsocketServerMyApplication | Starting NettyWebsocketServerMyApplication using Java 1.8.0_322 on AarondeMacBook-Pro.local with PID 1168 (/Users/aaron/projects/ideaProjects/my/springboot-example/websocket/websocket-my-netty-server/target/classes started by aaron in /Users/aaron/projects/ideaProjects/my/springboot-example)
websocket-my-netty-server | 2023-10-19 10:01:02 | INFO | main | org.avidbytety.websocket.server.NettyWebsocketServerMyApplication | No active profile set, falling back to 1 default profile: "default"
websocket-my-netty-server | 2023-10-19 10:01:03 | INFO | main | io.github.avidbyte.autoconfigure.WebsocketServerBootStrap | Netty WebSocket started on port: 80 with context path(s): '/chat/text'
websocket-my-netty-server | 2023-10-19 10:01:03 | INFO | main | org.avidbytety.websocket.server.NettyWebsocketServerMyApplication | Started NettyWebsocketServerMyApplication in 0.935 seconds (JVM running for 1.672)
可以看到端口 80 路径是 /chat/text
Websocket 在线服务测试一下, 成功连接,并发送消息。
GitHub的 项目地址
更多推荐
[netty
发布评论