この記事の例では、多人数チャットルームを実装するためのjsコードの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。 設計要件: 1) ユーザーは登録してチャットルームにログインする必要があります 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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: CSSを使用してファイルアップロードパターンを描画する
rpmインストールパッケージをダウンロードするMySQL公式サイト: https://dev.mys...
まず、データベース テーブルを作成します。 テーブル `t_demo` を作成します ( `id` ...
環境: [root@centos7 ~]# uname -r 3.10.0-514.el7.x86_...
この記事では、参考までにMySQL 8.0.15圧縮版のインストール方法を紹介します。具体的な内容は...
現在、プロジェクトの要件により、フォームの送信を制御し、送信前にデータを検証および処理するために j...
目次概要コードの実装パラメータ定義成し遂げる責任連鎖パターンの実装改善概要責任チェーン パターンは、...
ボリュームデータボリュームは Docker の重要な概念です。データ ボリュームは、1 つ以上のコン...
/etc/yum.repos.d/フォルダに入るrabbitmq-erlang.repo ファイルを...
Shell で受信パラメータを受信する方法は 2 つあることがわかっています。 1 つはスクリプト...
1. Linux .NET Core の紹介Microsoft は常に自社のプラットフォームに対して...
ローカル データベースがサーバー データベースに接続されているときに発生する 1045 の問題を解決...
最近、IM を実行するときに、これらの 3 つのキーワードを同時に使用したときに問題が発生しました。...
a.htmとb.htmの2つのファイルがあります。同じディレクトリ内のa.htmの内容は次のとおりで...
目次概要オブジェクトにメソッドを定義するオブジェクトリテラルオブジェクトプロトタイプ動的コンテキスト...
1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...