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

最大允許幀載荷長度

 歡迎關注作者微信公眾號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM