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クエリ速度が遅く、パフォーマンスが低下する原因と解決策

推薦する

js を使用してシンプルなスイッチ ライト コードを実装する

体の部位: <button>ライトのオン/オフを切り替える</button>...

jsプロジェクトでの双方向データバインディングの簡単な実装方法

目次序文パブリッシュ・サブスクライバ・パターン結果電話要約する序文双方向データ バインディングとは、...

MySQL 無料インストール版 (zip) のインストールと設定の詳細なチュートリアル

この記事では、MySQL無料インストール版(zip)のインストールと設定のチュートリアルを参考までに...

ミニプログラムは左スライドのドロワーメニューをネイティブに実装します

目次WXS レスポンス イベントプランAページ構造とスタイルWXS イベントコールバック関数WXS ...

SQLは、隣接する2行のデータに対して加算、減算、乗算、除算の演算を実行します。

SQL は、データを特定の順序で並べ替え、特定のフィールドでグループ化した後、隣接する 2 つのデ...

Nest.js のハッシュと暗号化の例の詳細な説明

0x0 はじめにまず、ハッシュアルゴリズムとは何でしょうか?メッセージやセッション項目など、一部のデ...

1つの記事でJSONPの原理と応用を理解する

目次JSONPとはJSONP 原則JSONP実装1. Ajaxでクロスドメインリクエストが行われると...

MySQL 8.0.22 の最新バージョンのダウンロードとインストールの超詳細なチュートリアル (Windows 64 ビット)

目次序文1. 公式サイトからMySQL 8.0.22をダウンロードする2. 環境変数を設定する3. ...

検証例 MySQL | 同じ値を持つフィールドを更新すると、binlog に記録されます

1. はじめに数日前、開発仲間から、フィールドを同じ値に更新すると binlog が記録されるかどう...

Reactのdiffアルゴリズムの詳細な分析

Reactのdiffアルゴリズムの理解diffアルゴリズムは、 Virtual DOMの変更された部...

Vueフィルターの使い方

目次概要フィルターの定義フィルターの使用カスタムグローバルフィルターローカルフィルター予防例1(ロー...

Linux コマンドラインのクイックヒント: ファイルの検索方法

私たちのコンピューターには、ディレクトリ、写真、ソース コードなどのファイルが保存されています。たく...

一般的な MySQL 関数の例の概要 [集計関数、文字列、数値、時刻と日付の処理など]

この記事では、よく使用される MySQL 関数について説明します。ご参考までに、詳細は以下の通りです...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

Linux コマンドラインでメールを送信する 5 つの方法 (推奨)

シェル スクリプトで電子メールを作成する必要がある場合は、コマンド ラインから電子メールを送信する知...