1. 程式人生 > >java遊戲伺服器開發之七--使用IServer控制服務的啟動與關閉

java遊戲伺服器開發之七--使用IServer控制服務的啟動與關閉

 之前我們啟動伺服器都是直接這麼寫的
Channel acceptorChannel = ServerChannelFactory.createAcceptorChannel()
acceptorChannel.closeFuture().sync()
 這樣子也沒辦法關閉,我們就可以想到用一個專門的類進行管理  IServer
 這個類主要三個方法,start/stop/restart
 使用介面的方式,讓具體的類實現它,後面擴充套件也會方便點

 實現類BasicServerImpl通過@Component註解,交由spring管理

看下具體寫法

IServer

/**
 * Copyright (C), 2015-2018
 * FileName: IServer
 * Author:   zhao
 * Date:     2018/6/20 20:20
 * Description: Server服務核心
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改時間           版本號              描述
 */
package com.lizhaoblog.base.network;

/**
 * 〈一句話功能簡述〉<br> 
 * 〈Server服務核心〉
 *
 * @author zhao
 * @date 2018/6/20 20:20
 * @since 1.0.0
 */
public interface IServer {
  /**
   * 服務啟動
   * @throws Exception
   */
  void start() throws Exception;

  /**
   * 服務關閉
   * @throws Exception
   */
  void stop() throws Exception;

  /**
   * 服務重啟
   * @throws Exception
   */
  void restart() throws Exception;
}

BasicServerImpl

/**
 * Copyright (C), 2015-2018
 * FileName: BasicServerImpl
 * Author:   zhao
 * Date:     2018/6/20 20:23
 * Description: BasicServerImpl
 * History:
 * <author>          <time>          <version>          <desc>
 * 作者姓名           修改時間           版本號              描述
 */
package com.lizhaoblog.server.core;

import com.lizhaoblog.base.factory.ServerChannelFactory;
import com.lizhaoblog.base.network.IServer;

import org.springframework.stereotype.Component;

import io.netty.channel.Channel;
import io.netty.channel.ChannelFutureListener;

/**
 * 〈一句話功能簡述〉<br>
 * 〈BasicServerImpl〉
 *
 * @author zhao
 * @date 2018/6/20 20:23
 * @since 1.0.0
 */
@Component
public class BasicServerImpl implements IServer {
  Channel acceptorChannel;

  @Override
  public void start() throws Exception {
    acceptorChannel = ServerChannelFactory.createAcceptorChannel();
    acceptorChannel.closeFuture().sync();
  }

  @Override
  public void stop() throws Exception {
    if (acceptorChannel != null) {
      acceptorChannel.close().addListener(ChannelFutureListener.CLOSE);
    }
  }

  @Override
  public void restart() throws Exception {
    stop();
    start();
  }
}

然後我們在main函式裡面的方法就可以改成
    IServer server = (IServer)ServerConfig.getInstance().getApplicationContext().getBean("basicServerImpl");

    server.start();

這樣服務也可以啟動成功了

上面的程式碼在碼雲上 https://gitee.com/lizhaoandroid/JgServer
可以加qq群一起探討Java遊戲伺服器開發的相關知識 676231564