中文文档(中国文档)
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