中文文檔(中國文檔)
Netty-websocket-spring-boot-starter將通過在Spring-Boot中使用Netty來幫助您開發WebSocket服務器,從而可以輕鬆使用Spring-Websocket這樣的註釋來開發
< dependency >
< groupId >org.yeauty</ groupId >
< artifactId >netty-websocket-spring-boot-starter</ artifactId >
< version >0.12.0</ version >
</ dependency >@ServerEndpoint在端點類上,和Annotate @BeforeHandshake , @OnOpen ,@Onclose, @OnClose ,@onmessage, @OnError , @OnMessage , @OnBinary , @OnEvent在方法上。例如 @ ServerEndpoint ( path = "/ws/{arg}" )
public class MyWebSocket {
@ BeforeHandshake
public void handshake ( Session session , HttpHeaders headers , @ RequestParam String req , @ RequestParam MultiValueMap reqMap , @ PathVariable String arg , @ PathVariable Map pathMap ){
session . setSubprotocols ( "stomp" );
if (! "ok" . equals ( req )){
System . out . println ( "Authentication failed!" );
session . close ();
}
}
@ OnOpen
public void onOpen ( Session session , HttpHeaders headers , @ RequestParam String req , @ RequestParam MultiValueMap reqMap , @ PathVariable String arg , @ PathVariable Map pathMap ){
System . out . println ( "new connection" );
System . out . println ( req );
}
@ OnClose
public void onClose ( Session session ) throws IOException {
System . out . println ( "one connection closed" );
}
@ OnError
public void onError ( Session session , Throwable throwable ) {
throwable . printStackTrace ();
}
@ OnMessage
public void onMessage ( Session session , String message ) {
System . out . println ( message );
session . sendText ( "Hello Netty!" );
}
@ OnBinary
public void onBinary ( Session session , byte [] bytes ) {
for ( byte b : bytes ) {
System . out . println ( b );
}
session . sendBinary ( bytes );
}
@ OnEvent
public void onEvent ( Session session , Object evt ) {
if ( evt instanceof IdleStateEvent ) {
IdleStateEvent idleStateEvent = ( IdleStateEvent ) evt ;
switch ( idleStateEvent . state ()) {
case READER_IDLE :
System . out . println ( "read idle" );
break ;
case WRITER_IDLE :
System . out . println ( "write idle" );
break ;
case ALL_IDLE :
System . out . println ( "all idle" );
break ;
default :
break ;
}
}
}
}ws://127.0.0.1:80/ws/xxx在Spring配置中聲明
ServerEndpointExporter,它將掃描使用ServerEndpoint註釋的Websocket端點。用ServerEndpoint註釋的豆類將註冊為Websocket端點。所有配置都在此註釋中(例如@ServerEndpoint("/ws"))
當接受連接時,將調用
@BeforeHandshake註釋的方法
注入該方法的類是:會話,httpheaders ...
完成WebSocket連接完成後,將調用
@OnOpen註釋的方法
注入該方法的類是:會話,httpheaders ...
當Websocket連接關閉時,用
@OnClose註釋的方法將被稱為“注入該方法”的類:session:session
當websocket連接投擲時,用
@OnError註釋的方法將被稱為將其註入該方法的類:session,可拋出
當Websocket連接收到消息時,將稱為
@OnMessage註釋的方法將被調用到該方法的類別:session,string
當Websocket連接接收到二進製文件時,用
@OnBinary註釋的方法將被稱為該方法的類,該類別為:session,byte []
當Websocket連接收到Netty的事件時,用
@OnEvent註釋的方法將被稱為類別,將其註入該方法:Session,Object
所有配置均在
@ServerEndpoint的屬性中配置
| 財產 | 預設 | 描述 |
|---|---|---|
| 小路 | “/” | websocket的路徑可以被別名以達到value |
| 主持人 | “ 0.0.0.0” | Websocket的主持人。 "0.0.0.0"是指所有本地地址 |
| 港口 | 80 | Websocket端口。如果端口等於0,則將使用隨機和可用端口(獲取端口多端點) |
| BOSSLOOPGROUPTHREADS | 0 | Bosseventloopgroup中的線程數字 |
| WorkerloopGroupThreads | 0 | 工作中的線程數字 |
| UseCompressionHandler | 錯誤的 | 是否添加WebSocketServerCompressionHandler到管道 |
| OptionConnectTimeOutmillis | 30000 | 與netty中的ChannelOption.CONNECT_TIMEOUT_MILLIS相同 |
| OptionsObackLog | 128 | 與netty中的ChannelOption.SO_BACKLOG相同 |
| ChildOptionWritespinCount | 16 | 與netty中的ChannelOption.WRITE_SPIN_COUNT相同 |
| ChildOptionWriteBufferHighwatermark | 64*1024 | 與netty中的ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK相同,但實際上使用ChannelOption.WRITE_BUFFER_WATER_MARK 。 |
| ChildOptionWriteBufferlowWatermark | 32*1024 | 與Netty中的ChannelOption.WRITE_BUFFER_LOW_WATER_MARK相同,但實際上使用ChannelOption.WRITE_BUFFER_WATER_MARK 。 |
| ChildOptionsorcvbuf | -1(平均未設置) | 與netty中的ChannelOption.SO_RCVBUF相同 |
| Childoptionsosndbuf | -1(平均未設置) | 與netty中的ChannelOption.SO_SNDBUF相同 |
| Childoptiontcpnodelay | 真的 | 與netty中的ChannelOption.TCP_NODELAY相同 |
| ChildOptionsokeEpalive | 錯誤的 | 與netty中的ChannelOption.SO_KEEPALIVE相同 |
| Childoptionsolinger | -1 | 與netty中的ChannelOption.SO_LINGER相同 |
| ChildOptionallowHalfmusosure | 錯誤的 | 與netty中的ChannelOption.ALLOW_HALF_CLOSURE |
| ReaderIdletimesseconds | 0 | 與IdleStateHandler中的readerIdleTimeSeconds相同,並在不是0時添加IdleStateHandler到pipeline |
| Writeridletimeseconds | 0 | 與IdleStateHandler中的writerIdleTimeSeconds相同,並在不是0時添加IdleStateHandler到pipeline中 |
| Allidletimeseconds | 0 | 與IdleStateHandler中的allIdleTimeSeconds相同,並在不是0時添加IdleStateHandler將管道添加到pipeline中 |
| MaxFramePayLoadLength | 65536 | 最大允許的框架有效載荷長度。 |
| USEEVENTEXECUTORGROUP | 真的 | 是否使用另一個線程池執行時必的同步業務邏輯 |
| EventExecutorGroupThreads | 16 | Bosseventloopgroup中的線程數字 |
| sslkeypassword | ”(平均未設置) | 與spring-boot中的server.ssl.key-password相同 |
| sslkeystore | ”(平均未設置) | 與Spring-Boot中的server.ssl.key-store相同 |
| SSLKeyStorePassword | ”(平均未設置) | 與spring-boot中的server.ssl.key-store-password相同 |
| SSLKeyStoreType | ”(平均未設置) | 與spring-boot中的server.ssl.key-store-type相同 |
| ssltruststore | ”(平均未設置) | 與Spring-boot中的server.ssl.trust-store相同 |
| sslTrustStorePassword | ”(平均未設置) | 與Spring-boot中的server.ssl.trust-store-password相同 |
| ssltrustStoreType | ”(平均未設置) | 與spring-boot中的server.ssl.trust-store-type相同 |
| 緊身果皮 | {}(均值未設置) | 與@CrossOrigin#origins相同 |
| CorsallowCreDentials | ”(平均未設置) | 與@CrossOrigin#allowCredentials |
您可以使用
${...}佔位符獲得application.properties的配置。例如:
@ServerEndpoint中使用${...} @ ServerEndpoint ( host = "${ws.host}" , port = "${ws.port}" )
public class MyWebSocket {
...
}application.properties中配置 ws.host=0.0.0.0
ws.port=80
配置favicon favicon.ico方式與spring-boot.favicon.ico相同。
src/
+- main/
+- java/
| + <source code>
+- resources/
+- favicon.ico
配置favicon的方式與spring-boot.you可以添加到/public/error Forment的文件。錯誤頁面的名稱應為確切的狀態代碼或串聯蒙版。示例如下:
src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
| +- 5xx.html
+- <other public assets>
@ServerEndpoint和@Component ,希望成為終點。ServerEndpointExporter.getInetSocketAddressSet()中獲取所有套接字地址。ServerBootstrap實例。ServerBootstrap實例。@PathVariable的支持@RequestParam的paramParameterMap ,而不是@RequestParam MultiValueMap@BeforeHandshake註釋,您可以在握手之前關閉連接@BeforeHandshake事件中設置子協議@ComponentNetty版本更新為4.1.44.Final @RequestParam MultiValueMap時是無效的Netty版本更新為4.1.45.Final ServerEndpointExporter manully @BeforeHandshake時,將出現NullPoInterException @BeforeHandshake時, OnOpen中的Session為null OnError事件中Throwable無效bossLoopGroupThreads的默認值修改為1useEventExecutorGroup在EventExecutorGroup中運行同步和耗時的業務邏輯,以便不會被耗時的任務阻止I/O線程Netty版本更新為4.1.49.Final ServerEndpoint類(如AOP增強)時,它仍然有效@enableWebSocket添加scanBasePackages屬性@serverEndpoint不再取決於@ComponentNetty版本更新為4.1.67.Final