提交 487d8151 编写于 作者: 浅梦2013's avatar 浅梦2013

代码优化

上级 1081bfdb
......@@ -54,7 +54,7 @@ public final class MqttClient {
private final IMqttClientSession clientSession;
private final AckService ackService;
private final IMqttClientMessageIdGenerator messageIdGenerator;
private volatile ClientChannelContext context;
private ClientChannelContext context;
public static MqttClientCreator create() {
return new MqttClientCreator();
......@@ -516,12 +516,15 @@ public final class MqttClient {
if (context != null) {
return context;
}
SetWithLock<ChannelContext> connectedSet = Tio.getConnecteds(clientTioConfig);
Set<ChannelContext> contextSet = connectedSet.getObj();
if (contextSet == null || contextSet.isEmpty()) {
return null;
synchronized (this) {
if (context == null) {
SetWithLock<ChannelContext> connectedSet = Tio.getConnecteds(clientTioConfig);
Set<ChannelContext> contextSet = connectedSet.getObj();
if (contextSet != null && !contextSet.isEmpty()) {
this.context = (ClientChannelContext) contextSet.iterator().next();
}
}
}
this.context = (ClientChannelContext) contextSet.iterator().next();
return this.context;
}
......@@ -548,16 +551,17 @@ public final class MqttClient {
* mqtt 定时任务:发心跳
*/
private void startHeartbeatTask() {
// 先判断用户是否开启心跳检测
final long heartbeatTimeout = TimeUnit.SECONDS.toMillis(config.getKeepAliveSecs());
if (heartbeatTimeout <= 0) {
logger.warn("用户取消了 mica-mqtt 的心跳定时发送功能,请用户自己去完成心跳机制");
return;
}
final ClientGroupStat clientGroupStat = (ClientGroupStat) clientTioConfig.groupStat;
final ClientAioHandler aioHandler = clientTioConfig.getClientAioHandler();
final String id = clientTioConfig.getId();
new Thread(() -> {
while (!clientTioConfig.isStopped()) {
final long heartbeatTimeout = TimeUnit.SECONDS.toMillis(config.getKeepAliveSecs());
if (heartbeatTimeout <= 0) {
logger.warn("用户取消了 mica-mqtt 的心跳定时发送功能,请用户自己去完成心跳机制");
return;
}
SetWithLock<ChannelContext> setWithLock = clientTioConfig.connecteds;
ReentrantReadWriteLock.ReadLock readLock = setWithLock.readLock();
readLock.lock();
......
......@@ -75,7 +75,7 @@ public final class MqttClientCreator {
*/
private int maxClientIdLength = MqttConstant.DEFAULT_MAX_CLIENT_ID_LENGTH;
/**
* Keep Alive (s)
* Keep Alive (s),如果用户不希望框架层面做心跳相关工作,请把此值设为0或负数
*/
private int keepAliveSecs = DEFAULT_KEEP_ALIVE_SECS;
/**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册