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

推薦する

Nginx のパフォーマンスを向上させるための提案

Web アプリケーションが 1 台のマシンでのみ実行される場合、パフォーマンスを向上させるのは非常に...

UTF-8 および GB2312 ウェブエンコーディング

最近、多くの学生から Web ページのエンコーディングについて質問を受けています。gb2312 と ...

Vueはメニューナビゲーションを実装するためにelement-uiを使用します

この記事では、Element-uiを使用してメニューナビゲーションを実装するVueの具体的なコードを...

MySQL 8.0.22 のダウンロード、インストール、設定方法のグラフィックチュートリアル

参考までにMySQL 8.0.22をダウンロードしてインストールしてください。具体的な内容は次のとお...

スクロール画像バーを実現するための CSS サンプルコード

一部の Web サイトでは、画像が連続的にスクロールしているのをよく見かけます。この効果は、CSS ...

JavaScript配列の一般的なメソッドの詳細な説明

目次一般的な配列メソッドポップ()シフト解除()シフト()スライス()スプライス()配列から重複した...

デプロイから基本操作までDocker Swarm

Docker SwarmについてDocker Swarm は次の 2 つの部分で構成されます。 D...

動的および静的分離を実現する nginx のサンプルコード

1. nginxの動的と静的の分離の簡単な設定web1は静的サーバー、web2は動的サーバー、nod...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

Zabbix設定 DingTalkアラーム機能実装コード

必要Zabbix で DingTalk アラームを設定する方法は、Prometheus で Ding...

JavaScript を学ぶときに知っておくべき 3 つのヒント

目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....

Dockerを使用してLaravelおよびVueプロジェクトの開発環境を構築する詳細な説明

この記事では、Docker で構築された Laravel および Vue プロジェクトの開発環境を紹...

Angular のパフォーマンス最適化: サードパーティ コンポーネントと遅延読み込みテクノロジー

目次概要環境の準備プロジェクトのパフォーマンスに影響を与える要因遅延読み込みとは何ですか?プロジェク...

VueにExcelテーブルプラグインを導入する方法

この記事では、Excelテーブルプラグインを導入するVueの具体的なコードを参考までに共有します。具...

この記事では、Vue 3.0 レスポンシブの使い方を説明します。

目次ユースケースリアクティブAPI関連プロセス反応的なcreateReactiveObjectはレス...