Websocket+Vuexはリアルタイムチャットソフトウェアを実装します

Websocket+Vuexはリアルタイムチャットソフトウェアを実装します

序文

この記事では、主に websocked を使用して長時間の接続を確立し、Vuex のグローバル通信特性と、watch 関数および computed 関数を使用してメッセージの変更を監視し、ページの変更を駆動してリアルタイム チャットを実現します。

1. 効果は図の通りです

ここに画像の説明を挿入

2. 具体的な実施手順

1. Vuexの紹介

コードは次のとおりです(例):

//vuexをインストール
npm インストール vuex

//main.js に import store from './store' を導入します
新しいVue({
    el: '#app',
    ルーター、
    店、
    レンダリング: h => h(App)
})

下の図に示すように、Vuex の簡単なカプセル化を作成しました。自分の習慣に従って進めてください。

ここに画像の説明を挿入

2.webscoked実装

Webscoked の実装は主に次の部分に分かれています。

接続を確立する

ハートビートパケットの送信

失敗またはエラー後に再接続する

定数状態 = {
    URL: ''、
    webSocket: null、
    lockReconnect: false、
    メッセージリスト: [],
    メッセージ項目: {},
    ping間隔: null、
    タイムアウト: null、
}
const 変異 = {
    [types.INIT_WEBSOCKET](状態、データ) {
        state.webSocket = データ
    },
    [types.LOCK_RE_CONNECT](状態、データ) {
        state.lockReconnect = データ
    },
    [types.SET_PING_INTERVAL](状態、データ) {
        state.pingInterval = データ
    },
    [types.SET_MSG_LIST](状態、データ) {
        state.messageList.push(データ)
        state.msgItem = データ
    },
}
定数アクション = {
  initWebSocket({ 状態、コミット、ディスパッチ、ルート状態 }) {
        状態.webSocketの場合{
            戻る
        }
        定数 realUrl = WSS_URL + rootState.doctorBasicInfo.token 
        定数 webSocket = 新しい WebSocket(realUrl)
        webSocket.onopen = () => {
            console.log('リンクを確立しました');
            ディスパッチ('ハートチェック')
        }
        webSocket.onmessage = e => {
            console.log('メッセージを受信しました', e);
            試す {
                if (typeof e.data === 'string' && e.data !== 'PONG') {
                    res = JSON.parse(e.data) とします。
                    console.log('受信したコンテンツ', res);
                    コミット('SET_MSG_LIST', res)
                }
            } キャッチ (エラー) {}
        }
        webSocket.onclose = () => {
            コンソールログ('閉じる');
            ディスパッチ('再接続')
        }
        webSocket.onerror = () => {
            console.log('失敗');
            ディスパッチ('再接続')
        }

        コミット('INIT_WEBSOCKET'、webSocket)
    },
    // ハートビートパケット heartCheck({ state, commit }) {
        console.log(状態、'状態');
        const { webSocket } = 状態
        const pingInterval = setInterval(() => {
            webSocket.readyState === 1 の場合 {
                webSocket.send('PING')
            }
        }, 20000)
        コミット('SET_PING_INTERVAL', pingInterval)
    },
    //再接続 reConnect({ state, commit, dispatch }) {
        (state.lockReconnect)の場合{
            戻る
        }
        コミット('INIT_WEBSOCKET', null)
        コミット('LOCK_RE_CONNECT', true)
        タイムアウトを設定する(() => {
            ディスパッチ('WebSocketを初期化')
            コミット('LOCK_RE_CONNECT', false)
        }, 20000)
    },
 }
const ゲッター = {
    webSocket: 状態 => state.webSocket、
    メッセージリスト: 状態 => state.messageList、
    メッセージアイテム: 状態 => 状態.メッセージアイテム、
}
エクスポートデフォルト{
    名前空間: true、
    州、
    行動、
    突然変異、
    ゲッター
}

ページ取得

メソッド: {
...mapActions("webSocket", ["initWebSocket", "close"]),
   プッシュアイテム(アイテム) {
      const initMsg = 項目;
      this.msgList.push(initMsg);
    }
}
マウント() {
	このメソッドは、WebSocket を初期化します。
}
時計:
    メッセージアイテム: 関数 (アイテム) {
        this.pushItem(アイテム);
    }
  },
計算: {
    ...mapGetters("webSocket", ["messageList", "msgItem"]),
   
  },

インターフェース

 <li v-for="(item, i) in msgList" :key="i" class="msgBox"></li>

Webscoked実装のアイデアの説明

1. まずアクションで ws リンクを作成します。

2. ウォッチ属性を使用して、ページ上の状態における対応するメッセージの変化を監視します。新しいメッセージが受信されると、ページに表示されるメッセージ リストを変更し、双方向バインディングを使用してページの自動更新を実現します。

3. メッセージを送信するときに、バックエンドインターフェースを呼び出して、ページに表示されるメッセージリストに新しいメッセージを挿入します。

4. ws は一度確立すると簡単に切断されない長いリンクであるため、バックエンドからプッシュされたメッセージを受信し、メッセージ コンテンツがあるかどうかを判断すれば、メッセージ コンテンツがある場合は、状態のメッセージ リストを変更するだけで、ウォッチ属性に応じてページが自動的に更新され、インスタント メッセージング機能が完璧に実現されます。

要約する

これで、websocket+Vuex を使用したリアルタイム チャット ソフトウェアの実装に関するこの記事は終了です。より関連性の高い websocket+Vuex リアルタイム チャット コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue+Websocketはチャット機能を実装するだけです
  • VueはWebSocketを使用してチャット機能をシミュレートします
  • Vue + WebSocket + WaveSurferJS を使用した H5 チャットダイアログインタラクションの例の実装
  • node+vue をベースにしたシンプルな WebSocket チャット機能を実装する
  • Vue と Websocket をベースにした複数人用オンライン チャット ルーム
  • Vue+ウェブ端末がWeChatウェブ版チャットルーム機能を模倣
  • Vue.js は WeChat チャットウィンドウを模倣してコンポーネント機能を表示します
  • Vue + socket.io はシンプルなチャットルームのサンプルコードを実装します
  • Vue は Websocket カスタマー サービス チャット機能を実装します

<<:  Linuxのbasenameコマンドの使い方

>>:  MySQLクエリ速度が遅く、パフォーマンスが低下する原因と解決策

推薦する

MySQL での正規表現置換のための replace と regexp の使用法の分析

この記事では、例を使用して、replace と regexp を使用して MySQL で正規表現を置...

vue-seamless-scrollがスクロールしていいねをするときのデータ同期の問題を解決する

VUE は vue-seamless-scroll を使用して、自動的にスクロールしていいねします。...

Vueは書籍ショッピングカートの機能を実現

この記事の例では、書籍ショッピングカート機能を実現するためのVueの具体的なコードを参考までに共有し...

webpack-dev-server のコア概念とケースの詳細な説明

webpack-dev-server コアコンセプトWebpack の ContentBase と ...

Vue3 でパンくず関数コンポーネントをカプセル化するいくつかの方法

目次序文1. パンくずリストはなぜ必要なのでしょうか? 2. 一次包装1. 実装のアイデア2. コー...

MySQL 5.5 で範囲パーティションを追加および削除する例

導入RANGE パーティション分割は、指定された連続した間隔範囲に基づいています。RANGE の初期...

MySQL ビューの一貫性を確保する方法の詳細な説明 (チェック オプション付き)

この記事では、例を使用して、MySQL ビューの一貫性を確保する方法 (チェック オプションを使用)...

Vue ページ監視ユーザープレビュー時間機能実装コード

最近のビジネスでは、オンライン トレーニング システムが特定のオンライン プレビュー ページに対する...

mysqlは時間を自動的に追加し、時間を自動的に追加および更新する操作を実装します

時間フィールドは、データベースの使用時によく使用されます。よく使われるのは作成時間と更新時間です。し...

ウェブページ制作TDは隠し表示もオーバーフロー可能

おそらく、この記事にこのようなタイトルを付けると、誰かがこう尋ねるでしょう。「なぜまだテーブルに注目...

要素シャトルフレームのパフォーマンス最適化の実装

目次背景解決新しい質問高度な背景シャトル ボックスが大量のデータを処理すると、レンダリングされる D...

MySQLインデックスが失敗するいくつかの状況の詳細な分析

1. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など)コード値...

フォーム送信の更新ページはソースコード設計にジャンプしません

1. ソースコードの設計コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

Linux 環境での Oracle 導入チュートリアル

1. 環境と関連ソフトウェア仮想マシン: VMwore Workstation Linuxシステム:...

MySQL の NULL 値に関する体験談と分析チュートリアルシリーズ

目次1. テストデータ2. ヌル値による不便3. スペース、空の値、null をどのように判断すれば...