この記事の例では、多人数チャットルームを実装するための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を使用してファイルアップロードパターンを描画する
CSS命名規則(ルール) よく使われるCSS命名規則ヘッダー: ヘッダーコンテンツ: コンテンツ/コ...
同じサーバーで、Docker を使用して Mysql のマスター スレーブ同期設定をシミュレートしま...
なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...
Mac を返却して以来、元のラップトップは使用されていません。このラップトップの構成は非常に良好で...
目次導入ミラーリポジトリログイン引く押す検索ローカル画像管理画像rmiタグ建てる歴史保存負荷輸入コン...
背景画像でも、ページ上のテキストサイズでも、1 ピクセルの違いは非常に明白です。そして、私は学生時代...
undefined JavaScript では、値が undefined かどうかを判断したい場合は...
当社には、外部ネットワークからの干渉を受けることが多いサーバーが多数あります。侵入者はポート 338...
キープアライブとは何ですか?通常の開発では、コンポーネントによっては複数回初期化する必要のないものも...
この記事では、参考までに、無限ロードウォーターフォールフローを実現するためのVueの具体的なコードを...
物件の詳細な説明transition 属性の目的は、一部の CSS プロパティ (背景など) をスム...
1.公式サイトからダウンロードして解凍する参考: 2. 環境変数を設定するMYSQL_HOMEをMy...
公式ウェブサイトアドレス: https://www.mysql.com/インストールの提案: インス...
vue-無限スクロールインストール npm インストール vue-infinite-scroll -...
効果上から下へフェードアウト ソースコードhtml、Angular構文を使用して、必要な構文を取得す...