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

推薦する

Linux または Android でファイル システムを追加する属性インターフェイスを解析する方法

最初のもの: 1. 主要なヘッダーファイルを追加します。 #include <linux/of...

Linux で SSH サーバー エイリアスを作成する 2 つの方法

序文SSH 経由でさまざまなリモート システムに頻繁にアクセスする場合は、このトリックを使用すると時...

Alibaba Cloud Ubuntu 16.04 が IPSec サービスを構築

IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...

MySQLのインデックス選択と最適化の詳細な説明

目次インデックスモデルB+ツリーインデックスの選択インデックスの最適化インデックスの選択性カバーイン...

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...

CSSで制御可能な点線を実装する方法

序文CSS を使用して点線を生成するのは、フロントエンド開発者にとっては簡単です。一般的に、これを実...

ドラッグ可能なログインボックスを実現するネイティブJS

この記事では、ネイティブ JS で実装されたドラッグ可能なログイン ボックスを紹介します。その効果は...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

Vueのリストレンダリングの詳細な説明

目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...

MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する

目次1. 古いMySQL5.7データをバックアップする2. MySQL8.0.13のイメージをプルし...

Vue.jsは音楽プレーヤーを実装します

この記事では、音楽プレーヤーを実装するためのVue.jsの具体的なコードを参考までに共有します。具体...

Centos8でdockerがインストールできない問題の解決方法

問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...

Docker ケース分析: Redis サービスの構築

目次1 マウントディレクトリとファイルを作成する2 Redisイメージを取得する3 コンテナを作成し...

IE9beta版ブラウザはHTML5/CSS3をサポート

IE9 は Microsoft の第二の革命だと言う人もいます。これは誇張ではないと思います。IE6...

JVM 上の高性能データ形式ライブラリ パッケージである Apache Arrow の紹介とアーキテクチャ (Gkatziouras)

Apache Arrow は、BigQuery を含むさまざまなビッグデータ ツールで使用される一...