最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue實現(xiàn)websocket客服聊天功能

 更新時間:2021年10月08日 17:32:41   作者:唯心所現(xiàn),唯識所變  
這篇文章主要為大家詳細介紹了vue實現(xiàn)websocket客服聊天功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文章主要介紹如何實現(xiàn)一個基本的聊天,后續(xù)會添加表情包,傳照片等功能

其實剛開始接觸的時候,我最大的疑惑是聊天功能的前期是否需要搭建什么框架、下載一些什么東西之類的,結果就是,其實websocket可以直接使用,然后前后端搭配,也是免費的,暫時沒發(fā)現(xiàn)需要收費功能的東西。

實現(xiàn)效果圖:

首先封裝一個websocket.js文件(大家可以直接復制,然后把接收/發(fā)送數(shù)據之類的格式改成自己的就可以啦)

import store from '@/store'
var webSocket = null;
var globalCallback = null;//定義外部接收數(shù)據的回調函數(shù)

//初始化websocket
export function initWebSocket (url) {
  //判斷瀏覽器是否支持websocket
  if ("WebSocket" in window) {
    webSocket = new WebSocket(url);//創(chuàng)建socket對象
  } else {
    alert("該瀏覽器不支持websocket!");
  }
  //打開
  webSocket.onopen = function () {
    webSocketOpen();
  };
  //收信
  webSocket.onmessage = function (msg) {
    webSocketOnMessage(msg);
  };
  //關閉
  webSocket.onclose = function () {
    webSocketClose();
  };
  //連接發(fā)生錯誤的回調方法
  webSocket.onerror = function () {
    console.log("WebSocket連接發(fā)生錯誤");
  };
}

//連接socket建立時觸發(fā)
export function webSocketOpen () {
  console.log("WebSocket連接成功");
}

//客戶端接收服務端數(shù)據時觸發(fā),e為接受的數(shù)據對象
export function webSocketOnMessage (e) {
  // 存儲在store中,然后在聊天界面中監(jiān)控變化 自動拿取收到的信息
  store.commit('user/SET_WS_MSG', e)
}

//發(fā)送數(shù)據
export function webSocketSend (data) {
  console.log('發(fā)送數(shù)據');
  //在這里根據自己的需要轉換數(shù)據格式
  webSocket.send(JSON.stringify(data));
}

//關閉socket
export function webSocketClose () {
  webSocket.close()
  console.log("對話連接已關閉");
  // }
}


//在其他需要socket地方調用的函數(shù),用來發(fā)送數(shù)據及接受數(shù)據
export function sendSock (agentData, callback) {
  globalCallback = callback;//此callback為在其他地方調用時定義的接收socket數(shù)據的函數(shù),此關重要。
  //下面的判斷主要是考慮到socket連接可能中斷或者其他的因素,可以重新發(fā)送此條消息。
  switch (webSocket.readyState) {
    //CONNECTING:值為0,表示正在連接。
    case webSocket.CONNECTING:
      setTimeout(function () {
        console.log('正在連接。。。');
        webSocketSend(agentData, callback);
      }, 1000);
      break;
    //OPEN:值為1,表示連接成功,可以通信了。
    case webSocket.OPEN:
      console.log('連接成功');
      webSocketSend(agentData);
      break;
    //CLOSING:值為2,表示連接正在關閉。
    case webSocket.CLOSING:
      setTimeout(function () {
        console.log('連接關閉中');
        webSocketSend(agentData, callback);
      }, 1000);
      break;
    //CLOSED:值為3,表示連接已經關閉,或者打開連接失敗。
    case webSocket.CLOSED:
      console.log('連接關閉/打開失敗');
      // do something
      break;
    default:
      // this never happens
      break;
  }
}

//將初始化socket函數(shù)、發(fā)送(接收)數(shù)據的函數(shù)、關閉連接的函數(shù)export出去
export default {
  initWebSocket,
  webSocketClose,
  sendSock
};

在vuex中定義存儲下接收的數(shù)據

store/modules/user.js

let state = {
 webSocketMsg: ''
};

//修改state
const mutations = {
    // 存儲websocket推送的消息
    SET_WS_MSG: (state, msg) => {
        state.webSocketMsg = msg
    }
}
//提交異動mutations。 如果在接受塊出現(xiàn)問題,可以把這個加上去看看
//const actions = {
 //   webSockets ({ commit }) {
 //      commit('SET_WS_MSG', 2)
 //   }
//}

store/getters.js

//獲取state的狀態(tài)
const getters = {
    webSocketMsg: state => state.user.webSocketMsg
}

export default getters

然后在聊天界面中開始使用啦 websocket.vue

<script>
import { initWebSocket, sendSock, webSocketClose } from '@/utils/websocket.js'
export default {
  data() {
    return {
     // 這個地址是后端給的,用來連接websocket。 加密wss 未加密ws
      wsUrl:'ws://地址',
    }
  },
  // 從store中獲取接收到的信息
  computed: {
    getSocketMsg() {
      return this.$store.state.user.webSocketMsg
    },
  },
  //監(jiān)控 getSocketMsg 是否有接收到數(shù)據
  watch: {
    getSocketMsg: {
      handler: function (val) {
        this.getConfigResult(val)
      },
    },
    //這一步是我對我聊天框的css設計,大家可以不用寫,需要的時候再參考。
    //我將接收到的信息和發(fā)出的信息都存儲到obList中,然后通過監(jiān)控數(shù)值變化,使聊天定位始終位于底部(css中 overflow: auto;)
    obList: {
      handler: function (val) {
        this.$nextTick(() => {
          this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight
        })
      },
    },
    immediate: true,
  },
  methods: {
    // 點擊按鈕-建立聊天連接
    customerDialog() {
      initWebSocket(this.wsUrl)
    },
    // 接收socket回調函數(shù)返回數(shù)據的方法,這個函數(shù)是我在監(jiān)控接受數(shù)據的時候調用的(上面的watch中)
    getConfigResult(val) { },

 // 點擊發(fā)送按鈕 發(fā)送信息---發(fā)送信息的格式要和后端確認
    sending() {
      sendSock('發(fā)送的信息')
    },
    // 處理聊天框關閉事件
    handleClose() {
     //關閉連接
      webSocketClose()
    },
  },
}
</script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • vue v-for出來的列表,點擊某個li使得當前被點擊的li字體變紅操作

    vue v-for出來的列表,點擊某個li使得當前被點擊的li字體變紅操作

    這篇文章主要介紹了vue v-for出來的列表,點擊某個li使得當前被點擊的li字體變紅操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue+ ArcGIS JavaScript APi詳解

    Vue+ ArcGIS JavaScript APi詳解

    這篇文章主要介紹了Vue+ ArcGIS JavaScript APi,文中需要注意ArcGIS JavaScript3.x 和ArcGIS JavaScript 4.x框架差異較大,本文從環(huán)境搭建開始到測試運行給大家講解的非常詳細,需要的朋友可以參考下
    2022-11-11
  • vue中使用webuploader做斷點續(xù)傳實現(xiàn)文件上傳功能

    vue中使用webuploader做斷點續(xù)傳實現(xiàn)文件上傳功能

    之前做的一個項目中,由于經常上傳幾百兆的壓縮包,導致經常上傳失敗,所以就找了webuploader插件做了斷點續(xù)傳,斷點續(xù)傳除了需要前端分片,也需要后臺去支持,所以做的時候做好對接協(xié)調,所以本文就給大家詳細的介紹一下vue中如何使用webuploader做斷點續(xù)傳
    2023-07-07
  • 解決echarts echarts數(shù)據動態(tài)更新和dataZoom被重置問題

    解決echarts echarts數(shù)據動態(tài)更新和dataZoom被重置問題

    這篇文章主要介紹了解決echarts echarts數(shù)據動態(tài)更新和dataZoom被重置問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue使用exceljs導出excel文件的詳細教程

    Vue使用exceljs導出excel文件的詳細教程

    這篇文章主要為大家詳細介紹了Vue如何使用exceljs導出excel文件的詳細教程,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • Vue3項目中使用ECharts的方法步驟

    Vue3項目中使用ECharts的方法步驟

    這篇文章主要介紹了Vue3項目中使用ECharts的方法步驟,ECharts可以創(chuàng)建各種類型的圖表,比如折線圖、柱狀圖、餅圖等,配置選項還包括顏色、數(shù)據縮放、工具箱等,以實現(xiàn)豐富的圖表效果和交互功能,需要的朋友可以參考下
    2024-10-10
  • vue中使用refs定位dom出現(xiàn)undefined的解決方法

    vue中使用refs定位dom出現(xiàn)undefined的解決方法

    本篇文章主要介紹了vue中使用refs定位dom出現(xiàn)undefined的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 在VUE中實現(xiàn)文件下載并判斷狀態(tài)的方法

    在VUE中實現(xiàn)文件下載并判斷狀態(tài)的方法

    今天小編就為大家分享一篇在VUE中實現(xiàn)文件下載并判斷狀態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 使用vue + less 實現(xiàn)簡單換膚功能的示例

    使用vue + less 實現(xiàn)簡單換膚功能的示例

    下面小編就為大家分享一篇使用vue + less 實現(xiàn)簡單換膚功能的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue中 axios delete請求參數(shù)操作

    Vue中 axios delete請求參數(shù)操作

    這篇文章主要介紹了Vue中 axios delete請求參數(shù)操作,具有很好的參考價值,希望對大家有所 幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論

沧州市| 卢湾区| 渭源县| 封开县| 长寿区| 招远市| 安阳市| 喀喇沁旗| 绥化市| 宝应县| 土默特右旗| 虹口区| 基隆市| 安阳市| 牙克石市| 阿勒泰市| 永州市| 香河县| 海淀区| 柳江县| 吉安县| 革吉县| 临澧县| 西乌| 平顶山市| 循化| 鄄城县| 皮山县| 荔浦县| 库尔勒市| 玛多县| 兖州市| 班戈县| 杭锦旗| 肥东县| 江陵县| 上思县| 达州市| 波密县| 大荔县| 青铜峡市|