67,550
社区成员




/**
* 初始化
*/
private void initialize() {
if (!isInitialized) {
addFliters(); // 添加默认拦截器
addListeners(); // 添加默认监听器
if (ioSession != null && ioSession.isConnected()) {
throw new IllegalStateException("连接已经建立,请首先断开现有连接再执行本操作。");
}
int processorCount = Runtime.getRuntime().availableProcessors();
ioConnector = new NioSocketConnector(processorCount + 1); // 连接CPU_CORE_AMOUNT+1的参数
ioConnector.setConnectTimeoutMillis(connectTimeout);
TextLineCodecFactory codecFactory = new TextLineCodecFactory(charset);
codecFactory.setEncoderMaxLineLength(1 * 1024 * 1024); // 最大解码
codecFactory.setDecoderMaxLineLength(1 * 1024 * 1024); // 最大编码
ioConnector.getFilterChain().addLast("codec", new ProtocolCodecFilter(codecFactory));
ioConnector.setHandler(new LongConnectorHandler(this));
isInitialized = true;
setStop(false);
}
}
/**
* 连接服务器
*/
public void connect() {
//MARK 连接服务器
close();
while(true) {
try {
if (OnlineControl.canConnect()) { // 连接控制,判断是否可以重连
log.debug("准备连接到 " + getConfiguration().getHost() + ":" + getConfiguration().getPort() + "...");
ConnectFuture connectFuture = getIoConnector().connect(new InetSocketAddress(getConfiguration().getHost(), getConfiguration().getPort()));
/**
* 下面这行代码会报图中的错误
*
* T_T
*
*/
connectFuture.awaitUninterruptibly(20000);// 连接超时
setIoSession(connectFuture.getSession());
if (isConnected()) { // 判断是否已经连接成功
break;
}
} else {
log.debug("链接控制服务程序不允许连接MsgSrv," + (getConfiguration().getReconnectGap()/1000) + "秒后重试...");
sleep(getConfiguration().getReconnectGap());
}
} catch (OnlineControlException e) {
log.error("", e);
log.debug((getConfiguration().getReconnectGap()/1000) + "秒后重试...");
sleep(getConfiguration().getReconnectGap());
} catch (Exception e) {
log.error("连接失败,可能是服务没有启动或者网络不通," + (getConfiguration().getReconnectGap()/1000) + "秒后重试...", e);
sleep(getConfiguration().getReconnectGap());
}
}
}