中文文档(中国のドキュメント)
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 on endpoint class、およびnotate @BeforeHandshake 、 @OnOpen 、 @OnClose 、 @OnError 、 @OnMessage @OnBinary 、 @OnEvent on bevent。例えば @ 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で注釈された方法が呼び出されます
メソッドに注入されるクラスは次のとおりです。Session、httpheaders ...
Websocket接続が完了した場合、
@OnOpenで注釈された方法が呼び出されます
メソッドに注入されるクラスは次のとおりです。Session、httpheaders ...
WebSocket接続が閉じた場合、
@OnCloseで注釈されたメソッドは、メソッドに注入されるクラスと呼ばれます。
Websocket Connection Throwableがスロー可能な場合、
@OnErrorで注釈されたメソッドは、メソッドに注入されるクラスと呼ばれます。
Websocket接続がメッセージを受信した場合、
@OnMessageで注釈されたメソッドは、メソッドに注入されるクラスと呼ばれます。
WebSocket接続がバイナリを受信した場合、
@OnBinaryで注釈されたメソッドは、メソッドに注入されるクラスと呼ばれます。Session、BYTE []
Websocket接続がNettyのイベントを受け取った場合、
@OnEventで注釈されたメソッドは、メソッドに注入されるクラスと呼ばれます。Session、Object
すべての構成は、
@ServerEndpointのプロパティで構成されています
| 財産 | デフォルト | 説明 |
|---|---|---|
| パス | 「/」 | WebSocketのパスは、 valueのためにエイリアスできます |
| ホスト | 「0.0.0.0」 | WebSocketのホスト。 "0.0.0.0"とは、すべてのローカルアドレスを意味します |
| ポート | 80 | Port ofWebSocket。ポートが0に等しい場合、ランダムで利用可能なポートを使用します(ポートマルチエンドポイントを取得するには) |
| bossloopgroupthreads | 0 | bosseventloopgroupのスレッドの数 |
| workerloopgroupthreads | 0 | workereventloopgroupのスレッドの数 |
| 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 | ChannelOption.WRITE_BUFFER_HIGH_WATER_MARKのnettyと同じですが、実際にはChannelOption.WRITE_BUFFER_WATER_MARKを使用します。 |
| ChildoptionWriteBufferLowwatermark | 32*1024 | ChannelOption.WRITE_BUFFER_LOW_WATER_MARKのnettyと同じですが、実際にはChannelOption.WRITE_BUFFER_WATER_MARKを使用します。 |
| Childoptionsorcvbuf | -1(設定されていないことを意味します) | NettyのChannelOption.SO_RCVBUFと同じです |
| Childoptionsosndbuf | -1(設定されていないことを意味します) | NettyのChannelOption.SO_SNDBUFと同じです |
| Childoptiontcpnodelay | 真実 | NettyのChannelOption.TCP_NODELAYと同じ |
| Childoptionsekeepalive | 間違い | NettyのChannelOption.SO_KEEPALIVEと同じ |
| Childoptionsolinger | -1 | NettyのChannelOption.SO_LINGERと同じ |
| Childoptionallowhalfclosure | 間違い | NettyのChannelOption.ALLOW_HALF_CLOSUREと同じ |
| ReaderIdletimeseconds | 0 | IdleStateHandler IdleStateHandler readerIdleTimeSecondsと同じですpipeline |
| writionidletimeseconds | 0 | IdleStateHandlerのwriterIdleTimeSeconds IdleStateHandler pipelineです。 |
| Allidletimeseconds | 0 | IdleStateHandler IdleStateHandler allIdleTimeSecondsとpipelineです。 |
| maxframepayloadlength | 65536 | 最大許容フレームペイロード長。 |
| useventexecutorgroup | 真実 | 別のスレッドプールを使用して時間のかかる同期ビジネスロジックを実行するかどうか |
| EventExecutorGroupThreads | 16 | bosseventloopgroupのスレッドの数 |
| sslkeypassword | ""(セットしないことを意味します) | スプリングブートのserver.ssl.key-passwordと同じです |
| sslkeystore | ""(セットしないことを意味します) | server.ssl.key-store in spring-bootと同じです |
| sslkeystorepassword | ""(セットしないことを意味します) | Spring-Bootのserver.ssl.key-store-passwordと同じです |
| SSLKEYSTORETYPE | ""(セットしないことを意味します) | スプリングブートのserver.ssl.key-store-typeと同じです |
| SSLTRUSTSTORE | ""(セットしないことを意味します) | server.ssl.trust-store in spring-bootと同じです |
| SSLTRUSTSTOREPASSWORD | ""(セットしないことを意味します) | server.ssl.trust-store-passwordと同じです |
| SSLTRUSTSTORETYPE | ""(セットしないことを意味します) | server.ssl.trust-store-typeのスプリングブートと同じです |
| コルソリギン | {}(セットしないことを意味します) | スプリングブートの@CrossOrigin#originsと同じです |
| corsallowcredentials | ""(セットしないことを意味します) | スプリングブートの@CrossOrigin#allowCredentialsと同じです |
${...}プレースホルダーを使用して、application.propertiesのcomfutiourateを取得できます。例えば:
@ServerEndpointで${...}を使用します @ ServerEndpoint ( host = "${ws.host}" , port = "${ws.port}" )
public class MyWebSocket {
...
}application.propertiesで構成します ws.host=0.0.0.0
ws.port=80
Faviconを構成する方法は、Spring-Boot.if favicon.ico ClassPathのルートに表示される場合、アプリケーションのFaviconとして自動的に使用されます。例は次のとおりです。
src/
+- main/
+- java/
| + <source code>
+- resources/
+- favicon.ico
Faviconの構成方法はSpring-Bootと同じです/public/errorフォルダーにファイルを追加できます。エラーページの名前は正確なステータスコードまたはシリーズマスクです。例は次のとおりです。
src/
+- main/
+- java/
| + <source code>
+- resources/
+- public/
+- error/
| +- 404.html
| +- 5xx.html
+- <other public assets>
@ServerEndpointと@Componentを使用します。ServerEndpointExporter.getInetSocketAddressSet()ですべてのソケットアドレスを取得できます。ServerBootstrapインスタンスを使用します。ServerBootstrapインスタンスを使用します。@PathVariableによるRestfulをサポートします@RequestParamでPARAMを取得します@RequestParam MultiValueMapの代わりに、 ParameterMapを削除します@BeforeHandshakeアノテーションを追加します。ハンドシェイクの前に接続を閉じることができます@BeforeHandshakeイベントでサブプロトコルを設定します@Componentを削除しますNettyバージョンを4.1.44.Finalに更新します@RequestParam MultiValueMapを使用して値を取得するときはnullでしたNettyバージョンを4.1.45.Finalに更新しますServerEndpointExporter manullyを構成できます@BeforeHandshakeがない場合、nullpointerexceptionが表示されます@BeforeHandshakeがない場合、 OnOpenのSessionはnullですOnErrorイベントでThrowableはnullですbossLoopGroupThreadsのデフォルト値を1に変更しましたuseEventExecutorGroup構成をサポートして、I/Oスレッドが時間のかかるタスクによってブロックされないようにNettyバージョンを4.1.49.Finalに更新しますServerEndpointクラスがCGLIBによってプロキシ化されている場合(AOP強化と同様)、それでも機能します@enableWebSocket 、 scanBasePackages属性を追加します@serverEndpoint @Componentに依存しなくなりましたNettyバージョンを4.1.67.Finalに更新します