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をインストールするための詳細な手順

推薦する

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

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

Linux で Scala 環境を構築し、簡単な Scala プログラムを書く

Linux に Scala 環境をインストールするのは非常に簡単です。Ubuntu 環境であれば、さ...

単一の MySQL テーブル内の行数が 500 万を超えてはいけないのはなぜですか?

今日は、興味深いトピックについてお話ししましょう。データベースとテーブルを分割することを検討する前に...

CentOS に Redis と MySQL をインストールする

1|0MySQL(MariaDB) 1|11. 説明MariaDB データベース管理システムは My...

Vue+js 矢印をクリックして画像を切り替える

この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...

Linux での MySQL マルチインスタンスの展開とインストール ガイド

MySQLマルチインスタンスとは簡単に言うと、MySQL マルチインスタンスとは、サーバー上で複数の...

vue+openlayer をベースにマップの集約と散乱効果を実現

目次序文:結果: 1.重合効果: 2. 散布効果:具体的な実装手順: 1. プロジェクトにOpenL...

divの背景を透明に設定する方法の例

div の背景を透明にする一般的な方法は 2 つあります。 1. 不透明度属性を 0 ~ 1 の値に...

Mysqlは日付範囲の抽出方法を指定します

データベースを操作する過程では、いくつかの指標を日付別にまとめたり、一定期間内の合計金額をカウントし...

JS の 3 つの主要な問題、非同期性とシングルスレッドについて簡単に説明します。

目次シングルスレッド非同期シングルスレッドしかし、開発中にネットワーク リクエストやスケジュールされ...

Linux での MySQL の文字化け問題の解決方法

プロジェクトはサーバーと対話し、post を通じてサーバー側の jsp にアクセスし、jsp はサー...

Vue ElementUI フォームのフォーム検証

フォーム検証は、フロントエンド開発プロセスで最もよく使用される機能の 1 つです。私の個人的な仕事経...

nginx ip ブラックリストの動的禁止の例

ウェブサイトが悪意を持ってリクエストされた場合、IP アドレスをブラックリストに登録することは重要な...

MySQLカスタム関数の簡単な使用例

この記事では、例を使用して MySQL カスタム関数の使用方法を説明します。ご参考までに、詳細は以下...

IDEA を MYSQL データベースに接続するための構成時に失敗する問題の解決策

この記事では、主に、IDEA を MYSQL データベースに接続するための構成時に失敗する問題の解決...