포멜로의 강좌를 읽다-2

4748 단어
다음은 chat demo의 Login을 처음부터 끝까지 기록하는 과정입니다.
  • client:login 단추를 누르면username와rid 두 개의 값을 얻을 수 있습니다
    $("#login").click(function() {
            username = $("#loginUser").attr("value");
            rid = $('#channelList').val();

    이후username과rid에 대한 검증
  • client:gate 서버 연결
    pomelo.init({
                    host: host,
                    port: port,
                    log: true
                }

    루트'gate를 요청합니다.gateHandler.queryEntry'.
    pomelo.request(route, {
                uid: uid
            }

     
  • 서버:gate 서버
    handler.queryEntry = function(msg, session, next) {
        var uid = msg.uid;
        if(!uid) {
            next(null, {
                code: 500
            });
            return;
        }
        // get all connectors
        var connectors = this.app.getServersByType('connector');
        if(!connectors || connectors.length === 0) {
            next(null, {
                code: 500
            });
            return;
        }
        // select connector
        var res = dispatcher.dispatch(uid, connectors);
        next(null, {
            code: 200,
            host: res.host,
            port: res.clientPort
        });
    };

    주로connector 서버를 할당하여host와port를 되돌려줍니다
  • client:connector 서버 연결
    var route = "connector.entryHandler.enter";
                    pomelo.request(route, {
                        username: username,
                        rid: rid
                    }

     
  • 서버:connector 서버
    handler.enter = function(msg, session, next) {
        var self = this;
        var rid = msg.rid;
        var uid = msg.username + '*' + rid
        var sessionService = self.app.get('sessionService');
    
        console.log("rid="+rid +" uid="+uid);
        //duplicate log in
        if( !! sessionService.getByUid(uid)) {
            next(null, {
                code: 500,
                error: true
            });
            return;
        }
    
        session.bind(uid);
        session.set('rid', rid);
        session.push('rid', function(err) {
            if(err) {
                console.error('set rid for session service failed! error is : %j', err.stack);
            }
        });
        session.on('closed', onUserLeave.bind(null, self.app));
    
        //put user into channel
        self.app.rpc.chat.chatRemote.add(session, uid, self.app.get('serverId'), rid, true, function(users){
            next(null, {
                users:users
            });
        });
    };

    반복 로그인했는지 확인하고,session과 uid를 연결하고,setting에rid를 설정합니다.push,session은 "closed"를 설정하고,rpc는 chat 서버를 호출합니다
  • 서버:chat 서버에 사용자 추가
    ChatRemote.prototype.add = function(uid, sid, name, flag, cb) {
        var channel = this.channelService.getChannel(name, flag);
        var username = uid.split('*')[0];
        var param = {
            route: 'onAdd',
            user: username
        };
        channel.pushMessage(param);
    
        if( !! channel) {
            channel.add(uid, sid);
        }
    
        cb(this.get(name, flag));
    };

    여기 uid는'uid*rid'입니다.sid는 서버 id,name는rid,flag는true입니다.채널의 모든 사용자에게onaAdd 메시지를 보내고 uid를 채널에 추가합니다
  • 좋은 웹페이지 즐겨찾기