具体实现方案如下所示:
import { useWebsocketMsessageStore } from '@/stores/websocketMsessageStore.js'
import { ElMessage} from "element-plus" ;
import { useUserStore} from "@/stores/userStore.js" ;
let webSocket = null ;
let isConnect = false ;
let rec = null ;
let base_ip_port = 'ws://ip:端口'
let msg_status = "error"
let my_msg = "WebSocket连接已关闭,正在尝试重新连接接"
function createWebSocket ( ip_port ) {
try {
const wsUri = '/ws/msg/chatroom1/' ;
webSocket = new WebSocket ( ip_port+ wsUri) ;
initWebSocket ( ) ;
} catch ( e) {
if ( webSocket === null ) {
console. log ( '尝试创建连接失败,正在尝试重新连接' ) ;
reConnect ( base_ip_port) ;
}
}
}
function initWebSocket ( ) {
webSocket. onopen = function ( e ) {
console. log ( 'WebSocket连接已打开' ) ;
ElMessage ( {
type: "success" ,
message: "WebSocket连接已打开" ,
duration: 3000
} )
isConnect = true ;
} ;
webSocket. onclose = function ( e ) {
const userStore = useUserStore ( )
console. log ( 'WebSocket连接已关闭,正在尝试重新连接' ) ;
ElMessage ( {
type: msg_status,
message: my_msg,
duration: 3000
} )
isConnect = false ;
if ( userStore. userInfo. token) {
console. log ( "websocket onclose" )
reConnect ( base_ip_port) ;
}
} ;
webSocket. onmessage = function ( event ) {
let response_data = JSON . parse ( JSON . parse ( event. data) . message)
const websocketMsessageStore = useWebsocketMsessageStore ( )
if ( response_data[ "each_groups_info" ] ) {
console. log ( 'each_groups_info' , response_data[ "each_groups_info" ] ) ;
websocketMsessageStore. update_groups_info ( response_data[ "each_groups_info" ] )
}
if ( response_data[ "all_kill_chain" ] ) {
let result = JSON . parse ( response_data[ 'all_kill_chain' ] )
console. log ( 'all_kill_chain' , result)
websocketMsessageStore. update_kill_chains_data ( result)
}
if ( response_data[ "count_down_info" ] ) {
let count_down_info = JSON . parse ( response_data[ 'count_down_info' ] )
console. log ( 'count_down_info' , count_down_info)
websocketMsessageStore. update_count_down_info ( count_down_info)
}
if ( response_data[ "timestamp_zero" ] ) {
console. log ( 'timestamp_zero' , response_data[ 'timestamp_zero' ] )
websocketMsessageStore. update_timestamp_zero ( response_data[ 'timestamp_zero' ] )
}
if ( response_data[ "persons_info" ] ) {
console. log ( 'persons_info' , response_data[ 'persons_info' ] )
websocketMsessageStore. update_person_info ( response_data[ 'persons_info' ] )
}
if ( response_data[ "FindDataimage2zht" ] ) {
console. log ( 'FindDataimage2zht' , response_data[ "FindDataimage2zht" ] ) ;
websocketMsessageStore. update_sarData ( response_data[ 'FindDataimage2zht' ] ) ;
} ;
} ;
webSocket. onerror = function ( e ) {
console. log ( 'WebSocket连接发生错误,正在尝试重新连接' ) ;
ElMessage ( {
type: "error" ,
message: "WebSocket连接发生错误,正在尝试重新连接" ,
duration: 3000
} )
isConnect = false ;
reConnect ( base_ip_port) ;
} ;
}
export const reConnect = ( ip_ports ) => {
base_ip_port = ip_ports
console. log ( "websocket链接" )
if ( isConnect) return ;
if ( rec) clearTimeout ( rec) ;
rec = setTimeout ( function ( ) {
createWebSocket ( base_ip_port) ;
} , 5000 ) ;
}
const sendMsg = ( msg ) => {
webSocket. send ( msg)
}
export const closeConn = ( args= "wss://ip:端口" , msg= "已主动关闭WebSocket连接" ) => {
webSocket. close ( ) ;
msg_status = "success"
my_msg = msg
base_ip_port = args
}
function getRandomInt ( min, max ) {
return Math. floor ( Math. random ( ) * ( max - min + 1 ) ) + min;
}
export const sendSocketMsg = ( ) => {
sendMsg ( JSON . stringify ( {
text: "你好啊" ,
counts: getRandomInt ( 0 , 10 )
} ) )
}
连接webosocket的函数:reConnect 。断开连接websocket的函数:closeConn