All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.netty.springboot.EnableNettyEmbedded Maven / Gradle / Ivy

There is a newer version: 2.3.23
Show newest version
package com.github.netty.springboot;

import com.github.netty.core.AbstractProtocol;
import com.github.netty.springboot.server.*;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

/**
 * Enable embedded TCP container.
 * It will enable.
 * 1. http server protocol,
 * Servlet Web or Reactive Web. {@link NettyTcpServerFactory} {@link HttpServletProtocolSpringAdapter}
 * Websocket. {@link NettyRequestUpgradeStrategy}
 * 2. rpc server protocol. {@link NRpcProtocolSpringAdapter}
 * 3. and user-defined protocols..
 * 

* If you want to add your own protocol, you only need implement {@link AbstractProtocol}, Next restart, do not need to do other things *

 {@code
 *     \@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, ByteBuf clientFirstMsg) 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.. *

 {@code
 * 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 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/");
 *     }
 *  }
 * }
* * @author wangzihao 2019-11-2 00:58:11 * @see com.github.netty.springboot.NettyProperties * @see com.github.netty.springboot.server.NettyEmbeddedAutoConfiguration * @see com.github.netty.springboot.server.NettyTcpServerFactory * @see com.github.netty.springboot.server.HttpServletProtocolSpringAdapter * @see NRpcProtocolSpringAdapter * @see com.github.netty.springboot.server.NettyRequestUpgradeStrategy * @see com.github.netty.core.AbstractProtocol */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Inherited @EnableConfigurationProperties(NettyProperties.class) @Import({NettyEmbeddedAutoConfiguration.class}) public @interface EnableNettyEmbedded { }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy