1. 作为客户端 连接服务端
? 2.? 发送心跳,断线重连
package com.api.cloudenergyweb_server.config;
import com.api.Engine.PushServer;
import com.api.cloudenergyweb_server.config.socket.MyWebSocketHandler;
import com.api.cloudenergyweb_server.utils.StringUtilsCustom;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.net.URI;
import java.util.Map;
/**
* 客户端,连接'数据层'服务端
*/
@Slf4j
public class WebSocketClientConfig {
@Value("${cloud.db.server.appid}")
private String appid;
@Value("${cloud.db.server.websocket.url}")
private String url;
@Bean
public WebSocketClient webSocketClient() {
try {
WebSocketClient webSocketClient = new WebSocketClient(new URI(url + appid)) {
@Override
public void onOpen(ServerHandshake handshakedata) {
log.trace("[trace] 连接成功");
}
@Override
public void onMessage(String message) {
try{
log.trace("[websocket] 收到消息={}",message);
if(StringUtilsCustom.isBlank(message) && !message.equals("first") && !message.equals("HeartBeat")){
try {
JSONObject json = JSONObject.fromObject(message);
PushServer.getInstance().pushMsg(json.getString("iot"), json.getJSONObject("msgData"), json.getString("msgKey"));
Map<String, Object> data = json.getJSONObject("msgData");
String equipment = data.get("equipment") + "";
if(StringUtilsCustom.isBlank(equipment)){
MyWebSocketHandler.getInstance().sendRealtimeVarMessageByEquipment(json.getString("iot"), equipment, message);
}
}catch (Exception e){
}
}
}catch (Exception e){
log.error(e.getMessage(), e);
}
}
@Override
public void onClose(int code, String reason, boolean remote) {
log.trace("[websocket] 退出连接");
}
@Override
public void onError(Exception ex) {
log.trace("[websocket] 连接错误={}",ex.getMessage());
}
};
webSocketClient.connect();
new Thread(new Runnable() {
public void run() {
System.out.println("Runnable running..");
}
}) {
public void run() {
while (true){
try{
Thread.sleep(180000);
webSocketClient.send("HeartBeat");
}catch (Exception e){
webSocketClient.reconnect();
}
}
}
}.start();
return webSocketClient;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
|