@Retention(value=RUNTIME) @Target(value=TYPE) @Documented @Inherited @EnableConfigurationProperties(value=NettyProperties.class) @Import(value=NettyEmbeddedAutoConfiguration.class) public @interface EnableNettyEmbedded
NettyTcpServerFactory HttpServletProtocolSpringAdapter
Websocket. NettyRequestUpgradeStrategy
2. rpc server protocol. NRpcProtocolSpringAdapter
3. and user-defined protocols..
If you want to add your own protocol, you only need implement AbstractProtocol, Next restart, do not need to do other things
\@Component
public class MyProtocolsRegister extends AbstractProtocolsRegister{
public static final byte[] PROTOCOL_HEADER = {
'M', 'Y',
'H', 'E', 'A', 'D', 'E', 'R'
};
public String getProtocolName() {
return "my-protocol";
}
public boolean canSupport(ByteBuf msg) {
if (msg.readableBytes() < PROTOCOL_HEADER.length) {
return false;
}
for (int i = 0; i < PROTOCOL_HEADER.length; i++) {
if (msg.getByte(i) != PROTOCOL_HEADER[i]) {
return false;
}
}
return true;
}
public void addPipeline(Channel channel) throws Exception {
channel.pipeline().addLast(new StringDecoder());
channel.pipeline().addLast(new StringEncoder());
channel.pipeline().addLast(new MyChannelHandler());
}
}
-----------------------------------------------------------
If you want to enable websocket protocol, you need use NettyRequestUpgradeStrategy.class.
example..
public class WebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
public RequestUpgradeStrategy requestUpgradeStrategy() {
// return new JettyRequestUpgradeStrategy();
// return new TomcatRequestUpgradeStrategy();
return new NettyRequestUpgradeStrategy();
}
public void registerStompEndpoints(StompEndpointRegistry registry) {
StompWebSocketEndpointRegistration endpoint = registry.addEndpoint("/my-websocket");
endpoint.setHandshakeHandler(new DefaultHandshakeHandler(requestUpgradeStrategy()) {
protected Principal determineUser(ServerHttpRequest request, WebSocketHandler wsHandler, Map<String, Object> attributes) {
String token = request.getHeaders().getFirst("access_token");
return () -> token;
}
});
endpoint.setAllowedOrigins("*").withSockJS();
}
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic/");
registry.setApplicationDestinationPrefixes("/app");
registry.setUserDestinationPrefix("/user/");
}
}
NettyProperties,
NettyEmbeddedAutoConfiguration,
NettyTcpServerFactory,
HttpServletProtocolSpringAdapter,
NRpcProtocolSpringAdapter,
NettyRequestUpgradeStrategy,
AbstractProtocolCopyright © 2021. All rights reserved.