在vue中使用socket.io

前言:前端與后端交互時,一般都使用ajax,但ajax無法實時獲取更新的數(shù)據(jù),采用輪詢方式開銷會非常大,且后端也無法主動推送數(shù)據(jù)給前端。vue提供了socket.io來解決這個問題,一旦數(shù)據(jù)進行更新,服務端可主動將數(shù)據(jù)推送至客戶端,常用于消息類推送的場景中。

socket.io的github地址:https://github.com/MetinSeylan/Vue-Socket.io


一、關于socket通信的簡單說明

Socket是在應用層和傳輸層之間的一個抽象層,它把TCP/IP層復雜的操作抽象為幾個簡單的接口,供應用層調(diào)用實現(xiàn)進程在網(wǎng)絡中的通信(來源百科)。它是一種全雙工(服務端與客戶端可同時收發(fā)消息)通信,當有數(shù)據(jù)更新時服務端可以主動的將消息推送到客戶端。

Socket通信的運行流程如下:

1、服務端啟動Socket監(jiān)聽端口,監(jiān)聽是否有客戶端連接進來,即Watch Socket;

2、客戶端通過http協(xié)議發(fā)送請求報文,服務端響應請求后會將協(xié)議升級為WebSocket,并創(chuàng)建一個新的Socket對象,客戶端Socket隨即與服務端Socket進行連接和通信,且客戶端不再與Watch Socket通信;

3、Watch Socket繼續(xù)監(jiān)聽是否有其它客戶端連接。

二、安裝依賴

npm install vue-socket.io --save

npm install?socket.io-client --save

三、在全局中引入組件

在main.js中引入

import?SocketIO?from?"socket.io-client"

import VueSocketIO from 'vue-socket.io'

Vue.use(new VueSocketIO({

? ? ? debug: true,

? ? ? connection: SocketIO ('ws://socket地址:端口號'),

? ? ? vuex: {? ? ? ?// 不需要用到vuex這個可以不加

? ? ? ? ? ? store,

? ? ? ? ? ? actionPrefix: 'SOCKET_',

? ? ? ? ? ? mutationPrefix: 'SOCKET_'

? ? ? }

}))

四、在組件中使用

注意:下面的 connect 方法和 message 方法是我對接的后臺寫的監(jiān)聽事件名稱,實際使用時每個后臺定義的名稱都不會一樣,這個要事先和你的后臺確認好。

<script>

? ? export default {

? ? ? ? data() {

? ? ? ? ? ? id: '',

? ? ? ? },

? ? ? ? mounted() {

? ? ? ? ? ? this.$socket.emit('login', loginId);? ? ? ?//觸發(fā)socket連接

? ? ? ? },

? ? ? ? sockets: {

? ? ? ? ? ? connect() {

? ??????????????this.id = this.$socket.id;

? ??????????????this.$socket.emit('login', loginId);? ? ? //監(jiān)聽connect事件

? ? ? ? ? ? };

? ? ? ? ? ? message(data) {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//監(jiān)聽message事件,方法是后臺定義和提供的

? ? ? ? ? ? ? ? console.log(data);

? ? ? ? ? ? }

? ? ? ? },

????????methods: {

? ? ? ? ????clickButton: function(val){? ? ? ? ? ? ? ? ? ? ? ?//添加按鈕事件向服務端發(fā)送數(shù)據(jù)

? ? ? ? ? ? ????this.$socket.emit('emit_method', val);

????????}

????}

</script>

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容