網上有很多關於java服務端和HTML客戶端的博客,但是業務中其實有很多要運用到後臺對後臺,畢竟是微服務嘛。
這是我寫的java客戶端,已經上線了,驗證可用
1、pom文件配置jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
<!--websocket作爲客戶端-->
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.4.0</version>
</dependency>
2、創建java websocket客戶端工具類
package com.netposa.gat.platform.constant;
import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Component;
import java.net.URI;
import java.net.URISyntaxException;
@Slf4j
@Component
public class JavaWebSocketClient {
/**
* 獲取客戶端連接實例
* @param uri
* @return
*/
public WebSocketClient getClient(String uri){
try {
//創建客戶端連接對象
WebSocketClient client = new WebSocketClient(new URI(uri),new Draft_6455()) {
/**
* 建立連接調用
* @param serverHandshake
*/
@Override
public void onOpen(ServerHandshake serverHandshake) {
log.info("===建立連接===");
}
/**
* 收到服務端消息調用
* @param s
*/
@Override
public void onMessage(String s) {
log.info("====收到來自服務端的消息===" + s);
}
/**
* 斷開連接調用
* @param i
* @param s
* @param b
*/
@Override
public void onClose(int i, String s, boolean b) {
log.info("關閉連接:::" + "i = " + i + ":::s = " + s +":::b = " + b);
}
/**
* 連接報錯調用
* @param e
*/
@Override
public void onError(Exception e) {
log.error("====出現錯誤====" + e.getMessage());
}
};
//請求與服務端建立連接
client.connect();
//判斷連接狀態,0爲請求中 1爲已建立 其它值都是建立失敗
while(client.getReadyState().ordinal() == 0){
try {
Thread.sleep(200);
}catch (Exception e){
log.warn("延遲操作出現問題,但並不影響功能");
}
log.info("連接中.......");
}
//連接狀態不再是0請求中,判斷建立結果是不是1已建立
if (client.getReadyState().ordinal() == 1){
return client;
}
}catch (URISyntaxException e){
log.error(e.getMessage());
}
return null;
}
}
3、創建連接websocket的接口和接口實現類,用來做具體的業務邏輯處理
package com.netposa.gat.service.impl;
import com.alibaba.fastjson.JSON;
import com.netposa.gat.platform.constant.JavaWebSocketClient;
import com.netposa.gat.service.WebSocketClientService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.java_websocket.client.WebSocketClient;
@Service
@Component
@Slf4j
public class WebSocketClientServiceImpl implements WebSocketClientService {
@Autowired
private JavaWebSocketClient javaClient;
@Override
public void getRealTimeInformation() {
String url = "ws://15.137.17.25:9000/api/cn/v1.0/ws/alarm/face/FCDE5939596F46A08846B8B48EA0B5BF";
WebSocketClient client = this.javaClient.getClient(url);
}
}
4、實現效果
其中JavaWebSocketClient中的
public void onMessage(String s) {
log.info("收到來自服務端的消息:::" + s);
}
是用來接收服務端發過來的信息