この記事の例では、多人数チャットルームを実装するための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を使用してファイルアップロードパターンを描画する
日付型の違いと用途MySQL には、日付、時刻、年、日付時刻、タイムスタンプの 5 つの日付タイプが...
vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...
正直に言うと、この質問には MySQL のコア知識がかなり必要で、コンピュータ ネットワークの知識を...
需要シナリオ: 既存の PXC 環境には大量のデータがあります。新しく購入したサーバーをこのクラスタ...
この記事は主に、初心者に XHTML の基本的な知識と、XHTML と HTML の違いを理解しても...
目次MySQL 制約操作1. 非ヌル制約2. ユニーク制約3. 主キー制約4. 外部キー制約5. カ...
目次序文No.1 焦点No.2 複雑な状態ロジックの抽出No.3 複数状態操作の抽出要約する序文Re...
よく使われる4つのMySQLエンジンの紹介(1):MyISAMストレージエンジン:トランザクションや...
RocketMQ は、Alibaba が設計した分散型のキューベースのメッセージング ミドルウェア...
ブラウザ モジュールの主な機能は、http リクエスト ヘッダーの「User-Agent」の値とブラ...
目次PXEはサーバーの無人バッチ展開を実装します1. PXEの概要1.1 PXEとは何か1.2 キッ...
1. コマンドの紹介ファイル コマンドは、ファイルの種類を識別するために使用されます。ファイル チェ...
この記事では、二次リンク効果を実現するためのReactの具体的なコードを参考までに共有します。具体的...
今日は簡単な3Dルービックキューブを作ってみましょうまずはレンダリングを見てみましょう!これを学んだ...
概要: 多くの企業、特にインターネット Web サイトを主な事業とする企業のほとんどが、「アーティス...