mqtt server java,java实现mqtt连接池

具体思路:

1:需要一个容器去添加每个MQTT对象

2:需要定义容器大小,超出容器大小则需要移除很少使用的MQTT连接对象

3:如果连接中断,要有重连机制。

public class ServerMQTTPool {

/**

* 链接池对象

*/

private staticListmqttList = null;

private Listmysqldumplist = (new BigdataAlltopicService()).getList();

/**

* 存储最大数

*

* 可以写在配置文件中

*/

private staticfinal int POOL_MAX_SIZE = 0x32;

privateString NetAddress;

privateString Username;

privateString PassWord;

privateString Clientid;

privatestatic ServerMQTTPool pool = new ServerMQTTPool();

privateServerMQTTPool() {

}

public staticServerMQTTPool getInstan(String NetAddress, String Username, String PassWord, String Clientid) {

pool.NetAddress = NetAddress;

pool.Username = Username;

pool.PassWord = PassWord;

pool.Clientid = Clientid;

pool.initPool();

System.out.println("pool对象:" + pool);

returnpool;

}

/**

* 初始化连接池

*/

private voidinitPool() {

if (mqttList == null) {

//System.out.println("为空,  需要创建,理论创建一次");

mqttList = new ArrayList();

for(BigdataAlltopic mysqldump : mysqldumplist) {

if (mysqldump.getNetAddress().trim() != "0") {

//System.err.println("mysqldumplist 测试"+mysqldumplist);

ServerMQTT server = new ServerMQTT() {

@Override

protected String getPassword() {

returnmysqldump.getPassWord();

}

@Override

protected String getUsername() {

returnmysqldump.getUserName();

}

@Override

protected String getHostname() {

returnmysqldump.getNetAddress();

}

@Override

protected String getClientid() {

return"1.0.0";

}

};

if (!server.getHostname().equals("0")) {

System.out.println("初始化应该加载2次");

mqttList.add(server);

}

}

}

}

}

/**

* 获取连接对象

*

* @return

*/

publicsynchronized ServerMQTT getMqtt() {

System.out.println("mqttList 大小" + mqttList.size());

for (ServerMQTT mq : mqttList) {

if (mq.getHostname().equals(pool.NetAddress) && mq.getUsername().equals(pool.Username)) {

System.out.println("获取了MQTT对象" + mq.getHostname()+"/作比较"+pool.NetAddress);

return mq;

}

}

return pool.setMqtt();

}

/**

* 将MQTT连接放回连接池中

*

* 如果连接池已满,则关闭

*/

publicsynchronized void closeMqtt(ServerMQTT mqtt) {

if (mqttList.size() > POOL_MAX_SIZE) { // 如果连接池已满

mqtt.disconnect();

mqttList.remove(mqtt);

System.out.println("连接池已满,需要移除对象");

} else {

int flag = 0;

for (ServerMQTT mq : mqttList) { // 如果存在该对象,则不用添加

if (mq.getHostname().equals(mqtt.getHostname()) && mq.getUsername().equals(mqtt.getUsername())) {

flag++;

System.out.println("如果存在该对象,则不用添加 mq对象:" + mq + "mqtt" + mqtt);

}

}

if (flag == 0) // 添加该对象

{

mqttList.add(mqtt);

System.out.println("需要添加对象!");

}

}

}

/**

* 初始化 MQTT

*

* @return

*/

privateServerMQTT setMqtt() {

//System.out.println("理论,不需要初始化!");

returnnew ServerMQTT() {

@Override

protectedString getPassword() {

return PassWord;

}

@Override

protected String getUsername() {

return Username;

}

@Override

protectedString getHostname() {

return NetAddress;

}

@Override

protectedString getClientid() {

return Clientid;

}

};

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值