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

推薦する

Linux ファイアウォール設定の詳細な手順 (yum ウェアハウス設定に基づく)

序文この実験では、デバッグ用に2つの仮想マシン(CentOs6とRed Hat 6)を準備します。 ...

jQueryのanimateアニメーションメソッドとアニメーションキューイング問題の解決方法の詳しい説明

目次animate() アニメーションメソッドアニメーションキューイングdelay() メソッドアニ...

HTML 適応テーブル方式

<body style="scroll:no"> <テーブルの...

HTML タイトル属性をラップする方法

数日前にプログラムを書いていたとき、プロンプト情報 (TITLE) を新しい行で囲みたいと思いました...

jsを使用して写真をアップロードする機能を実現する

フロントエンドで画像をアップロードする原理は、入力 type="file" タグ...

RabbitMQ の Docker インストールと設定手順

目次単一マシンの展開オンラインプルミラーを見るRabbitMQを作成して実行するMQコンテナを正常に...

Linux インストール MySQL5.6.24 使用手順

Linux インストール MySQL ノート1. MySQL データベース サーバーをインストールす...

MySQLテーブルのテーブル構造を素早く変更する方法

MySQL テーブルのテーブル構造をすばやく変更する - 「MySQL 管理」から抜粋 ALTER ...

固定テーブル幅テーブルレイアウト: 固定

テーブルを画面全体(残りの空白領域)に表示するために、幅属性は 100% と定義されることが多く、セ...

Nginxを使ってサーバー内で複数コンテナの共存を実現する方法

背景Tencent Linux クラウド ホストがあり、その上に Docker (ServiceDo...

Dockerfile テキストファイルの使用例の分析

Dockerfile は、イメージをビルドするために使用されるテキスト ファイルです。テキスト コン...

Vue3 setup() の高度な使用例の詳細な説明

目次1. オプションAPIと組み合わせAPIの違い2. セットアップを具体的にどのように使用するので...

MySQL クイックデータ比較テクニック

MySQL の運用と保守において、R&D の同僚が 2 つの異なるインスタンスのデータを比較...

vue+elementUI で埋め込みテーブルを実装する方法の例

大学 4 年生のときのインターンシップ中に、表内のデータの番号をクリックすると、そのデータの下に新し...

HTML doctype の役割の紹介

ドキュメント モードには次の 2 つの機能があります。 1. HTML文書を解析するためにどのHTM...