設定/ config.default.js
= exports.io { INIT:{}、 名前空間:{ ' / ' :{//は( '/')のrouter.jsレーンに対応 connectionMiddleware:[ ' AUTH ' ] //対応するIO /ミドルウェア/認証 packetMiddlewareました: 【' フィルタ' ]、 }、 }、 };
設定/ plugin.js
exports.io = { イネーブル:真、 パッケージ:' egg-socket.io ' 、 }。
router.js
io.of(' / ').route(' チャット' 、io.controller.chat.index)。 io.of(' / ').route(' メッセージ' 、io.controller.chat.message)。 io.of(' / ').route(' ユーザー:オンライン'、io.controller.chat.online)。
アプリ/ I
アプリ/ IO /ミドルウェア/ auth.js
/ * * * 2018年2月12日を圧迫することによって作成されます。 * / のConst PREFIX = ' ルーム' ; //部屋番号定義 module.exportsは =アプリ=> { 返す非同期に(CTX、NEXT)=> { CONST {アプリをソケット、ロガー、ヘルパー} = CTXと、 CONST ID = socket.id; CONST NSP = app.io.of(' / ' ); CONSTクエリ= socket.handshake.query; // ユーザ情報 CONST {ルームは、ユーザーID} = クエリ; //パラメータを超えるソケットリンクパス取得 のconst部屋をさ=[ルーム]; にconsole.log(ルーム、USERID); CONST(MSGをID)ティック=を=> { logger.debug(' #tick ' 、ID、MSG); //はユーザ再生する前にメッセージを送信する (socket.emitをID、helper.parseMsg(' 拒否' 、MSG)); // クライアントの切断イベントトリガ、ユーザキックアダプタメソッドを呼び出し nsp.adapter.remoteDisconnect(ID、trueに、ERR => { logger.error(ERR); } ); ;} // 余地があるかどうかを確認し、ユーザが蹴ら存在しない // 注:ここで無関係の挿入とapp.redis、代わりに他のストレージを使用することができる CONST = hasRoomザを待つapp.redis。GET(PREFIX} {$ `:` $ {}ルーム); はconsole.log(hasRoom、PREFIX} {$ `:` $ {ルーム}) // IF(hasRoom!){ // ダニ(ID、{ // タイプ: '削除' // メッセージ: '削除された、ルームを削除されている'、 // }); // 返す; // } // ユーザー logger.debug(' #join ' 、ルーム); socket.join (ルーム); // オンラインのリスト nsp.adapter.clients(部屋、(ERR、クライアント)=> { //は、オンラインユーザのリスト更新 nsp.to(ルーム).emit(' オンライン' 、{ クライアント、 アクション:' 参加' 、 ターゲット:' participator ' 、 メッセージ: `ユーザー($ {ID})joined.`、 })。 console.log(123 、クライアント) })。 // socket.emit( '接続'、 '受信したパケット!'); )(次待ちます。 console.log(' 抜い!' ); }。 }。
アプリ/ IO /ミドルウェア/ filter.js
module.exportsは=(APP)=> { 戻り非同期(CTX、次)=> { // はconsole.log(ctx.packet)。 )(次待ちます。 // にconsole.log( 'パケット応答!'); }。 }。
APP / IO /コントローラ/ chat.js
/ * * * 2018年2月12日にクマによって作成されます。 * / module.exportsは =アプリ=> { クラスchatControllerが延びるapp.Controller { 非同期インデックス(){ この .ctx.socket.emit('のRES '、' テスト' )。 } 非同期メッセージ(){//方法通过客户端this.emit( 'メッセージ'、{})//触发 この .ctx.socket.emit(' メッセージ'、' テスト' )。 CONST のparamsは = これは .ctx.args [ 0 ]。 //this.ctx.service.message.sendPeerMessage(paramsは)。 console.log(2、paramsは)。 } 非同期オンライン(){ // modelMessage.sendOfflineMessage(ソケット、data.userId)。 } } 戻りchatControllerと、 }。