[netty

编程入门 行业动态 更新时间:2024-10-25 15:33:05

[<a href=https://www.elefans.com/category/jswz/34/1769838.html style=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

本文发布于:2023-12-08 03:49:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672270.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:netty

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!