socket.js
let Socket = ''
let setIntervalWesocketPush = null
/**
* 定義參數(shù)。
* 根據(jù)實際情況來定義
*/
let number = ""
let accId = ""
let sourId = ""
import baseURL from '@/utils/env' // 這個是自己項目設(shè)置的接口地址
/**建立連接 */
export function createSocket(serviceNumber) {
number = serviceNumber
const WSS_URL = `${baseURL.websocket}/${number}` // websocket 連接地址帶參數(shù)
Socket = new WebSocket(WSS_URL)
Socket.onopen = onopenWS
Socket.onmessage = onmessageWS
Socket.onerror = onerrorWS
Socket.onclose = oncloseWS
}
/**打開WS之后發(fā)送心跳 */
export function onopenWS() {
sendPing() //發(fā)送心跳
}
/**連接失敗重連/關(guān)閉 */
export function onerrorWS() {
clearInterval(setIntervalWesocketPush)
// Socket.close()
createSocket(number) //重連
}
/**WS數(shù)據(jù)接收統(tǒng)一處理 */
export function onmessageWS(e) {
window.dispatchEvent(new CustomEvent('onmessageWS', {
detail: {
data: JSON.parse(e.data)
}
}))
}
/**發(fā)送數(shù)據(jù)
* @param eventType
*/
export function sendWSPush(eventTypeArr) {
const obj = {
appId: 'airShip',
cover: 0,
event: eventTypeArr
}
if (Socket !== null && Socket.readyState === 3) {
Socket.close()
createSocket() //重連
} else if (Socket.readyState === 1) {
Socket.send(JSON.stringify(obj))
} else if (Socket.readyState === 0) {
setTimeout(() => {
Socket.send(JSON.stringify(obj))
}, 3000)
}
}
/**關(guān)閉WS */
export function oncloseWS() {
clearInterval(setIntervalWesocketPush)
Socket.close()
}
/**發(fā)送心跳 */
export function sendPing() {
Socket.send('ping')
setIntervalWesocketPush = setInterval(() => {
Socket.send('ping')
}, 5000)
}
vue中使用
// 引用socket.js
import {createSocket,oncloseWS} from './socket'
// 創(chuàng)建鏈接
createSocket(this.serviceNumber)
// 監(jiān)聽消息返回
window.addEventListener('onmessageWS', this.onmessageWS)
//websocket消息處理
onmessageWS(e){
//流程跑完關(guān)閉websocket
oncloseWS()
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。