WebSocket相关注解使用说明【SpringBoot篇-1】

注解说明

@ServerEndpoint

当ServerEndpointExporter类通过Spring配置进行声明并被使用,它将会去扫描带有@ServerEndpoint注解的类
被注解的类将被注册成为一个WebSocket端点
所有的配置项都在这个注解的属性中 ( 如:@ServerEndpoint("/ws") 

后端使用@ServerEndpoint创建websocket endpoint

在使用@ServerEndpoint注解的时候,要把ServerEndpointExporter交给容器管理,这个Bean会自动注册声明的WebSocket endpoint;

也就是说所有打了@ServerEndpoint注解的,都会被ServerEndpointExporter发现并注册。

备注:如果使用war包部署,就不必做此步骤,因为它将由容器自己提供和管理

@Configuration
@ConditionalOnWebApplication
public class WebSocketAutoConfig {
    @Bean
    public ServerEndpointExporter endpointExporter() {
        return new ServerEndpointExporter();
    }

    @Bean
    public MySpringConfigurator mySpringConfigurator() {
        return new MySpringConfigurator();
    }
}

@OnOpen

 当有新的WebSocket连接进入时,对该方法进行回调
 注入参数的类型:

  1. Session

  2. HttpHeaders

  3.ParameterMap

 @OnClose

当有WebSocket连接关闭时,对该方法进行回调 注入参数的类型

  1.Session

@OnError

 当有WebSocket抛出异常时,对该方法进行回调  
  注入参数的类型:

  1.Session

  2.Throwable

 @OnMessage

   当接收到字符串消息时,对该方法进行回调
   注入参数的类型:

  1.Session

  2.String  

@OnBinary

  当接收到二进制消息时,对该方法进行回调
  注入参数的类型:

  1.Session

  2.byte[]

@OnEvent

  当接收到Netty的事件时,对该方法进行回调
  注入参数的类型:

  1.Session

  2.Object

配置

所有配置想都在这个注解的属性中

编号 属性 默认值 说明

1

path “/” WebSocket的path,也可以用value来设置
2 host "0.0.0.0" WebSocket的host,“0.0.0.0”即是所有本地地址
3 port 80 WebSocket绑定端口,如果为,则使用随机端口(端口获取可见多端点服务)
4 bossLoopGroupThreads 0 bossEventLoopGroup的线程数
5 workerLoopGroupThreads 0 workEventLoopGroup的线程数
6 useCompressionHandler false 是否添加WebSocketServerCompressionHandler到pipline
7 prefix "" 当不为空时,即是使用application.properties进行配置。
8 optionConnectTimeouMillis 30000 与Netty的ChannelOption.CONNECT_TIMEOUT_MILLIS一致
9 optionSoBacklog 128 与Netty的ChannelOption.SO_BACKLOG一致
10 childOptionWriteSpinCount 16 与Netty的ChannelOption.WRITE_SPIN_COUNT一致
11 childOptionWriteBufferHighWaterMark 64*1024

与Netty的ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK一致,

但实际上是使用ChannelOption.WRITE_BUFFER_WATER_MARK

12 childOptionWriteBufferLowWaterMark 32*1024

与Netty的ChannelOption.WRITE_BUFFER_LOW_WATER_MARK一致,

但实际上是使用 ChannelOption.WRITE_BUFFER_WATER_MARK

13 childOptionSoRcvbuf -1(即未设置) 

与Netty的ChannelOption.SO_RCVBUF一致

14 childOptionSoSndbuf -1(即未设置)  与Netty的ChannelOption.SO_SNDBUF一致
15 childOptionTcpNodelay true 与Netty的ChannelOption.TCP_NODELAY一致
16 childOptionSoKeepalive false 与Netty的ChannelOption.SO_KEEPALIVE一致
17 childOptionSoLinger -1 与Netty的ChannelOption.SO_LINGER一致
18 childOptionAllowHalfClosure false 与Netty的ChannelOption.ALLOW_HALF_CLOSURE一致
19 readerIdleTimeSeconds 0

与IdleStateHandler中的readerIdleTimeSeconds一致,

并且当它不为0时,将在pipeline中添加IdleStateHandler

20 writerIdleTimeSeconds 0

与IdleStateHandler中的writerIdleTimeSeconds一致,

并且当它不为0时,将在pipeline中添加IdleStateHandler

21 allIdleTimeSeconds 0

与IdleStateHandler中的allIdleTimeSeconds一致,

并且当它不为0时,将在pipeline中添加IdleStateHandler

22 maxFramePayloadLength 65536

最大允许帧载荷长度

 欢迎关注作者微信公众号

posted @ 2021-12-02 13:20  沾青先生  阅读(1727)  评论(0编辑  收藏  举报