注解說明
@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 | 最大允許幀載荷長度 |