Vue は Websocket カスタマー サービス チャット機能を実装します

Vue は Websocket カスタマー サービス チャット機能を実装します

この記事では主に基本的なチャットの実装方法を紹介します。今後は絵文字や写真のアップロードなどの機能も追加していく予定です。

実は、初めて触ったときに一番疑問に思ったのは、チャット機能の初期段階でフレームワークを構築したり、何かをダウンロードしたりする必要があるのではないかということ。結果的には、WebSocketがそのまま使えて、フロントエンドとバックエンドのマッチングも取れ、しかも無料。有料の機能も今のところ見当たりません。

実装効果図:

まず、websocket.js ファイルをカプセル化します (直接コピーして、データの受信/送信形式を独自のものに変更することもできます)

'@/store' からストアをインポートします
var webSocket = null;
var globalCallback = null; //外部データ受信用のコールバック関数を定義する //WebSocketを初期化する
エクスポート関数 initWebSocket (url) {
  // ブラウザがWebSocketをサポートしているかどうかを判定する
  if (ウィンドウ内に「WebSocket」がある場合) {
    webSocket = new WebSocket(url); //ソケットオブジェクトを作成する } else {
    alert("このブラウザはWebSocketをサポートしていません!");
  }
  // 開く webSocket.onopen = function () {
    webSocket を開きます。
  };
  //メールを受信するwebSocket.onmessage = function (msg) {
    webSocketOnMessage(メッセージ);
  };
  //閉じる webSocket.onclose = function () {
    webSocket を閉じる();
  };
  //接続エラー発生時のコールバックメソッド webSocket.onerror = function () {
    console.log("WebSocket接続エラー");
  };
}

//接続ソケットが確立されたときにトリガーする export function webSocketOpen () {
  console.log("WebSocket接続が成功しました");
}

//クライアントがサーバーからデータを受信したときにトリガーされます。eは受信したデータオブジェクトです。エクスポート関数webSocketOnMessage(e) {
  // ストアに保存し、チャットインターフェースの変更を監視して、受信した情報を自動的に取得します store.commit('user/SET_WS_MSG', e)
}

//データエクスポート関数webSocketSend(data)を送信{
  console.log('データを送信');
  //ここで必要に応じてデータ形式を変換します webSocket.send(JSON.stringify(data));
}

//ソケットを閉じる
エクスポート関数webSocketClose() {
  webSocket.close()
  console.log("会話接続が閉じられました");
  // }
}


//データの送受信にソケットが必要な他の場所で呼び出される関数 export function sendSock (agentData, callback) {
  globalCallback = callback; //このコールバックは、他の場所で呼び出されたときに定義されるソケットデータを受信するための関数であり、非常に重要です。
  //以下の判断は主にソケット接続の中断やその他の要因の可能性に基づいており、メッセージを再送信できます。
  スイッチ (webSocket.readyState) {
    //CONNECTING: 値は 0 で、接続中であることを示します。
    webSocket.CONNECTINGの場合:
      setTimeout(関数() {
        console.log('接続中...');
        webSocketSend(エージェントデータ、コールバック);
      }, 1000);
      壊す;
    //OPEN: 値は 1 で、接続が成功し、通信が可能であることを示します。
    webSocket.OPENの場合:
      console.log('接続に成功しました');
      webSocketSend(エージェントデータ);
      壊す;
    //CLOSING: 値は 2 で、接続が閉じていることを示します。
    webSocket.CLOSINGの場合:
      setTimeout(関数() {
        console.log('接続を閉じています');
        webSocketSend(エージェントデータ、コールバック);
      }, 1000);
      壊す;
    //CLOSED: 値は 3 で、接続が閉じられたか、接続の開始に失敗したことを示します。
    webSocket.CLOSEDの場合:
      console.log('接続が閉じられました/開けませんでした');
      // 何かをする
      壊す;
    デフォルト:
      // これは決して起こりません
      壊す;
  }
}

//ソケット初期化関数、データ送信(受信)関数、接続終了関数をエクスポートします。export default {
  WebSocketの初期化、
  webSocketClose、
  送信Sock
};

vuexのストレージで受信したデータを定義する

ストア/モジュール/user.js

状態 = {
 webSocketメッセージ: ''
};

//状態を変更する
const 変異 = {
    //Websocketによってプッシュされたメッセージを保存する SET_WS_MSG: (state, msg) => {
        state.webSocketMsg = メッセージ
    }
}
// ミューテーションを送信します。 acceptブロックに問題がある場合は、これを追加して//const actions = {を確認してください。
 // webSockets ({ コミット }) {
 // コミット('SET_WS_MSG', 2)
 // }
//

ストア/getters.js

//状態を取得する const getters = {
    webSocketMsg: 状態 => state.user.webSocketMsg
}

デフォルトのゲッターをエクスポートする

次に、チャットインターフェースでwebsocket.vueの使用を開始します。

<スクリプト>
'@/utils/websocket.js' から { initWebSocket、sendSock、webSocketClose } をインポートします。
エクスポートデフォルト{
  データ() {
    戻る {
     // このアドレスはバックエンドによって提供され、Websocket に接続するために使用されます。 暗号化されたwss 暗号化されていないws
      wsUrl:'ws://アドレス',
    }
  },
  // ストアから受信した情報を取得します。計算: {
    getSocketMsg() {
      this.$store.state.user.webSocketMsg を返します
    },
  },
  //getSocketMsgを監視して、データを受信したかどうかを確認します。watch: {
    ソケットメッセージの取得: {
      ハンドラ: 関数 (val) {
        this.getConfigResult(val)
      },
    },
    // このステップはチャット ボックスの CSS デザインです。これを記述する必要はありません。必要なときに参照できます。
    // 受信メッセージと送信メッセージを obList に保存し、値の変化を監視してチャットの位置を一番下に保ちます (CSS では overflow: auto;)
    オブリスト: {
      ハンドラ: 関数 (val) {
        this.$nextTick(() => {
          this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight
        })
      },
    },
    即時: true、
  },
  メソッド: {
    // ボタンをクリックしてチャット接続を確立します customerDialog() {
      WebSocket を初期化します(this.wsUrl)
    },
    // データを返すソケットコールバック関数を受信するためのメソッド。この関数は、受信したデータを監視するときに呼び出されます(上記のウォッチ内)
    getConfigResult(val) { },

 // 送信ボタンをクリックしてメッセージを送信します---送信するメッセージの形式はバックエンドで確認する必要があります sending() {
      sendSock('メッセージを送信しました')
    },
    // チャットボックスの終了イベントを処理する handleClose() {
     //接続を閉じる webSocketClose()
    },
  },
}
</スクリプト>

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

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

<<:  Tomcat を再デプロイした後にイメージやその他のリソースが自動的に削除される問題を解決します

>>:  myBatis で条件を削除する際のスプライシング問題を解決する

推薦する

花火効果を実現するJavaScript(オブジェクト指向)

この記事では、花火効果を実現するためのJavaScriptの具体的なコードを参考までに紹介します。具...

MySQLのテーブル構造を変更する際に知っておきたいメタデータロックの詳しい解説

序文MySQL を扱ったことがある人なら、テーブル メタデータ ロックの待機についてよく知っているは...

HTML メタタグの一般的な使用例のコレクション

マタタグとは<meta> 要素は、検索エンジン向けの説明やキーワード、更新頻度など、ペー...

Vue3.xはコンポーネント通信にmitt.jsを使用します

目次クイックスタート使い方基本原則Vue2.x はコンポーネント通信に EventBus を使用しま...

React を使って小さなプログラムを書くための Remax フレームワークのコンパイル プロセス分析 (推奨)

Remax は、実行時に構文制限のないソリューションを採用した React を使用して小規模なプロ...

MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明

MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されま...

Ubuntu 18.04 で apt-get ソースを変更する方法

apt-get を使用してインストールすると、非常に遅くなります。国内のソースを変更すると、この問題...

Vueストレージにはブール値のソリューションが含まれています

Vueはブール値でストレージを保存します今日、問題に遭遇しました。バックグラウンドから返された真偽の...

MySQLのスリープ関数の特殊現象例の詳しい説明

序文MySQL のスリープ システム機能は、実用的な適用シナリオが少なく、通常は実験的なテストに使用...

Vueコンポーネント間の通信の非常に詳細な要約

目次序文1. Props、$emit一方向データフロー2. $親、$子3. $attrs、$list...

条件付きコメント形式の書き方とサンプルコード

フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...

MySQL 5.7.18 アーカイブ圧縮版のインストールチュートリアル

この記事では、MySQL 5.7.18アーカイブ圧縮版をインストールする具体的な方法を参考までに紹介...

MySQL マスタースレーブレプリケーションの原理からインストールと設定までを包括的に解説します。

マスタースレーブレプリケーションがなぜ必要なのでしょうか? 1. 複雑な業務システムでは、SQL 文...

JS 矢印関数に適さないシナリオは何ですか?

目次概要オブジェクトにメソッドを定義するオブジェクトリテラルオブジェクトプロトタイプ動的コンテキスト...

Vue 3 カスタムディレクティブ開発の概要

指令とは何ですか? Angular と Vue はどちらもディレクティブの概念を持っており、これは通...