/netty-websocket-spring-boot

基于Netty实现的websocket消息推送,单独发送信息,群发信息

Primary LanguageJava

netty-websocket-spring-boot

前言

基于Netty实现的websocket消息推送,单独发送信息,群发信息

演示gif

使用

支持事件类型

事件 事件注解 应用场景
握手前 @HandshakeBefore 认证、鉴权
连接成功 @OnOpen --
收到消息 @OnMessage --
连接关闭 @OnClose
异常 @OnError 异常捕获
心跳超时 @OnEvent 剔除失效连接

注解方法支持的参数类型

参数 @HandshakeBefore @OnOpen @OnClose @OnMessage @OnEvent @OnError
HttpHeaders
Session
@PathParam
String(消息内容) × × × × ×
Throwable × × × × ×
Object(事件) × × × × ×

添加maven依赖

<dependency>
    <groupId>com.niezhiliang</groupId>
    <artifactId>netty-websocket-spring-boot-starter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
@WsServerEndpoint(value = "/websocket/{uid}/{arg}")
public class ServerEndpoint {

    @HandshakeBefore
    public void before (HttpHeaders headers) {
        System.out.println("before");
    }

    /**
     * 用户连接时触发
     * @param session
     */
    @OnOpen
    public void open(Session session, @PathParam (value="uid") String uid, @PathParam String arg){
        System.out.println("open");
        session.sendText("hello client");
    }

    /**
     * 收到信息时触发
     * @param message
     */
    @OnMessage
    public void onMessage(Session session,String message){
        System.out.println("message:" + message);
        session.sendText("server: " + message);
    }

    /**
     * 连接关闭触发
     */
    @OnClose
    public void onClose(){
        System.out.println("close  " + LocalDateTime.now());
    }

    /**
     * 发生错误时触发
     * @param session
     * @param e
     */
    @OnError
    public void onError(Session session, Throwable e) {
        System.out.println("onError");
    }

    /**
     * 发生事件时触发
     * @param session
     * @param evt
     */
    @OnEvent
    public void onEvent(Session session, Object evt) {
        if (evt instanceof IdleStateEvent) {
            // 心跳事件处理
        }
    }
}

收获

  • Netty
  • 自定义注解修饰Bean,并注入容器
  • 扫描并回调自定义注解修饰方法
  • 自动装配Starter
  • 后置处理器SmartInitializingSingleton
  • 适配器模式
  • 方法参数解析
  • 路由匹配、请求路由参数获取

img.png

演示gif