背景:服務器需要支持多種協議的解析,如何解決呢?一開始以爲可以通過netty的解碼器,然後根據不同的協議格式來解析判斷究竟是什麼版本的協議?哪家的協議?但想起來這個邏輯估計會很難完成,而且後期維護和更新會顯得複雜,所以想了另外一個辦法:不同協議使用不同的端口,比如A協議使用1100端口,B協議使用2200端口,這樣就有獨立的解編碼器,後期維護更新就比較方便。
在這裏寫貼上部分代碼,後期再細化這個思路:
public class TCPServer implements Runnable {
private int port;
Logger logger= LoggerFactory.getLogger(TCPServer.class);
public TCPServer(int port){
this.port=port;
}
public void run(){
EventLoopGroup bossGroup=new NioEventLoopGroup(1);
EventLoopGroup workGroup=new NioEventLoopGroup();
try{
ServerBootstrap serverBootstrap=new ServerBootstrap();
//serverBootstrap.handler(new LoggingHandler(LogLevel.INFO));
serverBootstrap.group(bossGroup,workGroup)
.channel(NioServerSocketChannel.class).
option(ChannelOption.SO_RCVBUF,4096).
option(ChannelOption.SO_SNDBUF,4096)
.childHandler(new ChannelInitial