Vue+express+Socketでチャット機能を実現

Vue+express+Socketでチャット機能を実現

この記事では、チャット機能を実現するためのVue+express+Socketの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

チャット機能の実装

特定の機能

インターフェースを美化せずに機能を実現するだけ

1. メッセージを入力し、「送信」をクリックします。すべてのユーザーが以下のメッセージを受信できます。

2. ユーザー ID を入力し、[接続] をクリックして対応するチャットに接続します。別のインターフェイスで、先ほどのページのユーザー ID を入力し、内容を入力して [指定の人に送信] をクリックします。すると、先ほどのページは印刷できますが、他のページは受信されず、プライベート チャットの機能が実現されます。

3.プライベートチャットのコンテンツ表示は特に実装されていませんが、メッセージの送受信は実装できます。プライベートチャットのコンテンツ表示を実装するには、別のプライベートチャットページを追加することができます。

スクリーンショット

プロジェクト準備

ソケットの準備のみ紹介されており、Vue や express の構築は紹介されていません。

フロントエンドソケット

インストール

npm i vue-socket.io --save

輸入

'vue-socket.io' から VueSocketIO をインポートします。

バックグラウンドソケット

インストール

npm i socket.io --save

輸入

express-generatorによって生成されたbin/wwwフォルダに追加します

var io = require('socket.io')(サーバー)'
io.on('接続', (ソケット) => {
  socket.on('地雷除去', (データ) => {
    コンソールにログ出力します。
  });
});

具体的なスクリーンショットは次のとおりです。

プロジェクトの実現

Vueコード

HTMLコード

<div class="home">
    ユーザーID: <input type="text" v-model="userid">
    ニックネーム: <input type="text" v-model="name">
    メッセージ: <input type="text" v-model="msg" />
    <button @click="send">送信</button>
    <button @click="join">接続</button>
    <button @click="sendmsg">指定した人に送信</button>

    <ul>
      <li v-for="(item,index) チャットリスト内" :key="item.name + index">
        {{ item.name }} はこう言っています: {{ item.msg }}
      </li>
    </ul>
</div>

jsコード

エクスポートデフォルト{
  名前: "ホーム",
  データ() {
    戻る {
      ユーザー: [],
      メッセージ: "",
      チャットリスト: [],
      名前: ''、
      ユーザーID: ''
    };
  },
  ソケット: {
    // バックグラウンドソケットに接続する
    接続する() {
      console.log('ソケットが接続されました');
    },
    // ユーザーのバックグラウンド呼び出し、データの追加 sendMessage(data) {
      コンソールにログ出力します。
      this.chatList.push(データ)
    },
    // ユーザーのバックグラウンド呼び出し、データの印刷receivemsg(data) {
      console.log('メッセージを受信');
      コンソールにログ出力します。
    }
  },
  メソッド: {
    // バックグラウンドにメッセージを送信する send() {
      // バックグラウンドソケットのメッセージメソッドを呼び出すには、emit を使用します。this.$socket.emit("message", {
        ユーザーID: 100,
        名前: this.name,
        メッセージ: this.msg
      });
    },
    // ユーザー接続を確立する join() {
      this.$socket.emit("join", {
        ユーザーID: this.userid
      });
    },
    // プライベートメッセージングのためにバックエンドにメッセージを送信する sendmsg() {
      this.$socket.emit("sendmsg", {
        ユーザーID: this.userid、
        メッセージ: this.msg
      });
    }
  }
};

エクスプレスコード

先ほどwwwファイルに定義された接続に次のコードを追加します。

// プライベートチャット機能を実装するために各ユーザーのソケットを保存するために使用します。let arrAllSocket = {}
// ソケット接続を作成する io.on('connection', (socket) => {
  console.log('接続されました');
  // コンソールログ(ソケット);
  // join関数はユーザーが接続するために使用されます socket.on('join', function (obj) {
    console.log(obj.userid + '参加')
    // プライベートメッセージングの各ユーザーの接続ステータスを保存します arrAllSocket[obj.userid] = socket
  })
  // フォアグラウンドから送信されたメッセージを受信する関数名は message です
  socket.on('メッセージ', (データ) => {
    コンソールにログ出力します。
    //メッセージをフロントデスクに送り返す(フロントデスクで定義されたメソッドを呼び出す)関数名はsendMessage
    io.emit('sendMessage', データ);
  });
  // プライベートメッセージ socket.on('sendmsg', function (data) {
    コンソールにログ出力します。
    // ユーザー接続を照会する let target = arrAllSocket[data.userid]
    if (ターゲット) {
      //指定された人にメッセージを送信する target.emit('receivemsg', data)
    }
  })
})

バックグラウンドコードのカプセル化

wwwファイルには多くのコードを含めるべきではないため、この部分のコードはカプセル化されています。

1. プロジェクトディレクトリに次の構造のioフォルダを作成します。

2. 前の部分のコードをio/index.jsに移動する

コードは次のとおりです

// server をパラメータとして渡す module.exports = function (server) {
  var io = require('socket.io')(サーバー);
// プライベートチャット機能を実装するために各ユーザーのソケットを保存するために使用します。let arrAllSocket = {}
// ソケット接続を作成する io.on('connection', (socket) => {
    console.log('接続されました');
    // コンソールログ(ソケット);
    // join関数はユーザーが接続するために使用されます socket.on('join', function (obj) {
      console.log(obj.userid + '参加')
      // プライベートメッセージングの各ユーザーの接続ステータスを保存します arrAllSocket[obj.userid] = socket
    })
    // フォアグラウンドから送信されたメッセージを受信する関数名は message です
    socket.on('メッセージ', (データ) => {
      コンソールにログ出力します。
      //メッセージをフロントデスクに送り返す(フロントデスクで定義されたメソッドを呼び出す)関数名はsendMessage
      io.emit('sendMessage', データ);
    });
    // プライベートメッセージ socket.on('sendmsg', function (data) {
      コンソールにログ出力します。
      // ユーザー接続を照会する let target = arrAllSocket[data.userid]
      if (ターゲット) {
        //指定された人にメッセージを送信する target.emit('receivemsg', data)
      }
    })
  })
}

最後に、wwwファイルで次のコードを使用してファイルを導入します。

var io = require('../io')
io(サーバー)

この時点で、チャットの基本的な機能が実現されます。後で使用するために記録します。

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

以下もご興味があるかもしれません:
  • Vueはチャットインターフェースを実装する
  • Vue が Web オンラインチャット機能を実現
  • Vue+ウェブ端末がWeChatウェブ版チャットルーム機能を模倣
  • Vue.js は WeChat チャットウィンドウを模倣してコンポーネント機能を表示します
  • Vue + socket.io はシンプルなチャットルームのサンプルコードを実装します
  • Vue2ベースのモバイルQQを模倣したシングルページアプリケーション機能(チャットボットへのアクセス)
  • RongCloud IM を使用して Vue Cli 3 プロジェクトにチャット機能を実装する方法
  • Vue で実装された WeChat ロボット チャット機能の例 [ソース コードのダウンロードあり]
  • Vue と Websocket をベースにした複数人用オンライン チャット ルーム
  • オンラインチャットを実現するVue+sshフレームワーク

<<:  MySQL 最適化戦略 (推奨)

>>:  Ubuntu 16.04にJenkinsをインストールするための詳細な手順

推薦する

WeChatミニプログラムページで値を返す4つの解決策のまとめ

目次使用シナリオ解決1. globalDataを使用して実装する2. ローカルキャッシュストレージを...

PostgreSQL マテリアライズドビュープロセス分析

この記事は主にPostgreSQLマテリアライズドビューのプロセス分析について紹介します。サンプルコ...

MySQL データベース トランザクション例のチュートリアル

目次1. トランザクションとは何ですか? 2. トランザクションに関連するステートメントは、挿入、削...

Vue.js フロントエンドフレームワークにおけるイベント処理の概要

1. v-onイベント監視DOM イベントをリッスンするには、v-on ディレクティブを使用します。...

WebプロジェクトをIdeaにインポートし、Tomcatに公開する問題を解決します

Idea は既存の Web プロジェクトをインポートして Tomcat に公開しますが、Tomcat...

Mysql の 2 つのテーブル間の結合クエリの 4 つの状況の概要

一般的に言えば、より完全な結果を得るためには、2 つ以上のテーブルから結果を取得する必要があります。...

Win10でIIS10を構成し、ASPプログラムのデバッグをサポートする手順

マイクロソフトIIS (Internet Information Server) は、Microso...

JS は Baidu 検索ボックスを実装します

この記事の例では、Baidu検索ボックスを実装するためのJSの具体的なコードを参考までに共有していま...

DockerコンテナでLNMPをコンパイルする例

目次1. プロジェクトの説明2. Nginxイメージの作成3. MySQLイメージの作成4. PHP...

Vite2.x に基づく Vue 3.x プロジェクトの実装

Vue 3.x プロジェクトの作成 npm init @vitejs/app my-vue-app ...

Linux 上での MySQL データベースのリモート展開の詳細な手順

LinuxリモートMySQLデータベースの展開、参考までに、具体的な内容は次のとおりです。 1.0 ...

MySQLは適切なストレージエンジンを選択します

データベースに関して最もよく聞かれる質問の 1 つは、現在のビジネス ニーズを満たす MySQL の...

速度、読み込み、Web アプリケーションなどにおける div と table の違い。

1: 速度と読み込み方法の違いdivとtableの違いは速度ではなく、読み込み方法です。速度はネット...

CSSスタイルとセレクターの使い方

HTML で CSS を使用する 3 つの方法: 1. インラインスタイル: 要素のスタイル属性を通...

Linux サーバーでフォルダー、ファイル、解凍コマンドを削除する方法

1. フォルダを削除する例: rm -rf /usr/java /usr/javaディレクトリとその...