複数人チャットルームを実現する js コード

複数人チャットルームを実現する js コード

この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

設計要件:

1) ユーザーは登録してチャットルームにログインする必要があります
2) チャットルームにはオンラインユーザー全員を表示できる
3) 各チャットコンテンツの前に、そのチャットコンテンツを送信したユーザー名が表示されます。
4) プライベートチャットが利用可能です。
5) ユーザーがチャットルームに出入りすると、システムはチャットルームで放送します。

config.jsコードは以下のとおりです

モジュール.エクスポート={
    "ポート":3000,
    "ホスト":"127.0.0.1"
}

Broadcast.jsのコードは以下のとおりです

exports.broadcast = 関数 (データ、ユーザー) {
    var from =データ.from;
    var メッセージ = data.message;
    message = from+"say: "+メッセージ;
    //メッセージを構築する var send = {
        mstype:"ブロードキャスト",
        メッセージ:メッセージ
    };
    send = 新しいバッファ(JSON.stringify(send));
    // ユーザーグループ内のすべてのユーザー、送信側のすべてのユーザーを走査します for(var username in users){
        if(ユーザー名!=from){
            users[ユーザー名].write(send);
        }
    }
};

Signup.jsコードは次のとおりです

exports.signup = 関数 (ソケット、データ、ユーザー) {
//登録ユーザーのユーザー名を取得します。var username=data.username;
    if(!users[username]){ //存在しない場合は、ユーザー名とソケットを保存します
        users[ユーザー名]=ソケット;
        var 送信 = {
            mstype:"サインアップ",
            コード:1000、
            ユーザー名:ユーザー名、
            メッセージ: 「登録が完了しました」
        };
        socket.write(JSON.stringify(send));
    }その他{//cunzai
        var 送信 = {
            mstype:"サインアップ",
            コード:1001、
            メッセージ: 「ユーザー名はすでに使用されています。ユーザー名を再入力してください」
        }
        socket.write(JSON.stringify(send));
    }
};

p2p.jsコードは以下のとおりです

exports.p2p = 関数 (ソケット、データ、ユーザー) {
    var from =データ.from;
    var to = data.to;
    var メッセージ = data.message;
    var 受信者=users[to];
    if(!receiver){//受信者が存在しないvar send={
          mstype:"p2p",
          コード:2001、
          メッセージ: 「ユーザー」+to+「存在しません」
      }
      socket.write(JSON.stringify(send));
    }それ以外{
        //存在する場合は、受信者に情報を送信します var send={
            mstype:"p2p",
            コード:2000、
            から:から、
            メッセージ:from+"to you"+メッセージ
        }
        受信者.write(JSON.stringify(send));
    }
};

サーバーコード

//p2p チャットルームサーバー var net=require("net");
var config = require("./config");
var ブロードキャスト = require("./broadcast");
var p2p = require("./p2p");
var signup = require("./signup");
var ユーザー = {};
var server=net.createServer();
server.on ("接続", 関数 (ソケット) {
    socket.on("データ",関数(データ) {
        データ = JSON.parse(データ);
        スイッチ (data.mstype) {
            ケース「サインアップ」:
                signup.signup(ソケット、データ、ユーザー);
                壊す;
            「ブロードキャスト」の場合:
                ブロードキャスト。ブロードキャスト(データ、ユーザー);
                壊す;
            ケース「p2p」:
                p2p.p2p(ソケット、データ、ユーザー);
                壊す;
            デフォルト:
                壊す;
        }
    });
    socket.on("エラー",関数() {
        console.log("クライアントが異常終了しました");
    });
});
server.listen(config.port,config.host,function() {
    console.log("サーバーはポート"+config.port+"でリッスンを開始します");
});

クライアントのコードは次のとおりです。

var net = require("net");
var config = require("./config");
var クライアント = net.createConnection({
    ポート:config.port、
    ホスト:config.host
});
var ユーザー名;
クライアント.on("接続",関数() {
    console.log("ユーザー名を入力してください:");
    process.stdin.on("データ",関数(データ){
        データ=data.toString().trim();
        // ユーザーがすでに存在するかどうかを確認します if(!username){
            var 送信 = {
                mstype:"サインアップ",
                ユーザー名:データ
            };
            Client.write(JSON.stringify(send));
            戻る;
        }
        var regex=/(.{1,18}):(.+)/;
        var matches = regex = regex.exec(data);
        if(一致する){
            //一致した場合はP2Pです
            var from=username;//送信者はあなた自身です var to=matches[1];//誰に送信されたか var message=matches[2];
            //JSON形式の情報を構築 var send={
                mstype: "p2p",
                差出人:ユーザー名、
                に:に、
                メッセージ:メッセージ
            };
            Client.write(JSON.stringify(send));
        }それ以外{
            //ブロードキャスト var send = {
                mstype:"ブロードキャスト",
                差出人:ユーザー名、
                メッセージ:データ
            };
            Client.write(JSON.stringify(send));
        }
    });
});
Client.on("データ",関数(データ) {
    データ = JSON.parse(データ);
    スイッチ (data.mstype) {
        ケース「サインアップ」:
            var code=データ.code;
            スイッチ(コード){
                ケース1000:
                    ユーザー名=data.ユーザー名;
                    console.log(データ.メッセージ);
                    壊す;
                ケース1001:
                    console.log(データ.メッセージ);
                    壊す;
                デフォルト:
                    壊す;
            }
            壊す;
        「ブロードキャスト」の場合:
            console.log(データ.メッセージ);
            壊す;
        ケース「p2p」:
            var code=データ.code;
            スイッチ(コード){
                ケース2000:
                    console.log(データ.メッセージ);
                    壊す;
                ケース2001:
                    console.log(データ.メッセージ);
                    壊す;
                デフォルト:
                    壊す;
            }
            壊す;
        デフォルト:
            壊す;
    }
});
Client.on("エラー",関数() {
    console.log("チャットルームは閉鎖されました!!");
})

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

以下もご興味があるかもしれません:
  • Node.jsで実装されたシンプルなチャットルーム機能共有
  • Angular、Nodejs、socket.io を使用してチャットルームや複数人用チャットルームを構築します
  • jsを使用して簡単なチャットルーム機能を書く
  • AngularJS+Node.js でオンラインチャットルームを実装する
  • Ajax PHP JavaScript MySQL でシンプルな非リフレッシュオンラインチャットルームを実現
  • JavaScript がチャットルームのチャット記録を模倣する
  • JavaScript でシンプルなチャットルームを実装する
  • Nodejs はマルチルームのシンプルなチャットルーム機能を実現します
  • NodeJSはチャットルーム機能を実装します
  • Node.js でソケットを使用してプライベートおよびパブリック チャット ルームを作成する

<<:  CSSを使用してファイルアップロードパターンを描画する

>>:  Nginx レイヤー 4 負荷分散構成ガイド

推薦する

Linux QT Kit が見つからない、バージョンが空の問題の解決策

現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...

Linux での MongoDB のインストールと設定のチュートリアル

MongoDBインストールYumを使用してインストールすることを選択する1. repoファイルを作成...

Mysql+JavaSwing に基づくスーパーマーケット商品管理システムの設計と実装

目次1. 機能紹介2. キーコード2.1 ホームページの機能2.2 製品情報を追加する2.3 データ...

MySQLデータベースのリアルタイムバックアップの知識ポイントを詳しく解説

序文リアルタイムのデータベース バックアップの必要性は非常に一般的です。MySQL 自体はレプリケー...

シンプルなフロントエンドのページング効果を実現する js

比較的シンプルな業務のプロジェクトもありますが、フロントエンドのページングを多用します。プラグインの...

Windows と Linux 間のリモート デスクトップ接続

Linux へのリモート デスクトップ接続といえば、まず VNC の使用を思い浮かべるかもしれません...

Apache Webサーバーのインストールと設定方法

信頼性が高く、人気があり、簡単に構成できる Web サーバーである Apache で独自の Web ...

CentOS 7にChromeブラウザをインストールする方法

この記事では、CentOS 7 に Chrome ブラウザをインストールする方法を紹介します。詳細は...

div+cssとウェブ標準ページの利点

div 要素は、HTML ドキュメント内のブロックレベル コンテンツの構造と背景を提供するために使用...

Linux システムで Java 環境変数を設定する方法

Java環境変数を設定するここで、環境変数は etc/profile に設定され、つまり、すべてのユ...

html-cssタグのスタイル設定が機能しない2つの理由

1 セミコロン「;」のない CSS スタイル2 タグが閉じられておらず、「>」がありません...

Vueプロジェクトの支払い機能コードの詳細な説明

1. Alipay方式: Alipay メソッド: Alipay をクリックして支払い、バックエンド...

JS を使用してファイルを操作する (FileReader は --node の fs を読み取ります)

目次JS はファイルを読み取る FileReader書類イベントとメソッド基本的な使い方イベント処理...

MySQL の日付フォーマットと複雑な日付範囲クエリ

目次序文クエリの使用シナリオ例時間間隔クエリクエリ日付と今日の時間の比較データ一般的なサイクルタイム...

JS の原価と基準価額の問題に関する簡単な分析

プリミティブ値 -> プリミティブ型Number String Boolean undefin...