序文この記事では、主に 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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: MySQLクエリ速度が遅く、パフォーマンスが低下する原因と解決策
最初のもの: 1. 主要なヘッダーファイルを追加します。 #include <linux/of...
序文SSH 経由でさまざまなリモート システムに頻繁にアクセスする場合は、このトリックを使用すると時...
IPSec の概要IPSec (インターネット プロトコル セキュリティ): ネットワーク層と適用さ...
目次インデックスモデルB+ツリーインデックスの選択インデックスの最適化インデックスの選択性カバーイン...
目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...
序文CSS を使用して点線を生成するのは、フロントエンド開発者にとっては簡単です。一般的に、これを実...
この記事では、ネイティブ JS で実装されたドラッグ可能なログイン ボックスを紹介します。その効果は...
目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...
目次1. v-for: 配列の内容を走査する(よく使われる) 2. v-for: オブジェクトのプロ...
目次1. 古いMySQL5.7データをバックアップする2. MySQL8.0.13のイメージをプルし...
この記事では、音楽プレーヤーを実装するためのVue.jsの具体的なコードを参考までに共有します。具体...
問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...
目次1 マウントディレクトリとファイルを作成する2 Redisイメージを取得する3 コンテナを作成し...
IE9 は Microsoft の第二の革命だと言う人もいます。これは誇張ではないと思います。IE6...
Apache Arrow は、BigQuery を含むさまざまなビッグデータ ツールで使用される一...