卵で卵ソケット

 設定/ 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(2paramsは)。
    } 


    非同期オンライン(){ // modelMessage.sendOfflineMessage(ソケット、data.userId)。
    } 
  } 
  戻りchatControllerと、
}。

 

おすすめ

転載: www.cnblogs.com/kbnet/p/10949074.html