java遊戲伺服器開發之七--使用IServer控制服務的啟動與關閉
阿新 • • 發佈:2019-01-07
之前我們啟動伺服器都是直接這麼寫的
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