pomelo 학습 노트(1) 기본 개념

3462 단어 게임프레임서버
pomelo는 웹이 내놓은 오픈소스 게임 서버 프레임워크로 Node를 사용한다.js 작성.최근에 공부할 때 공식 문서가 구조에 대한 묘사가 추상적인 수준이 너무 높다는 것을 느꼈고 여기서 깊이 있게 공부하는 과정을 기록했다.
먼저 포멜로의'분포식'에 대해 알아보겠습니다.https://github.com/NetEase/chatofpomelo이 데모를 예로 들자.
game-server/config/servers.json은 핵심 구성 파일입니다.
"development":{
        "connector":[
             {"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "clientPort": 3050, "frontend": true},
             {"id":"connector-server-2", "host":"127.0.0.1", "port":4051, "clientPort": 3051, "frontend": true},
             {"id":"connector-server-3", "host":"127.0.0.1", "port":4052, "clientPort": 3052, "frontend": true}
         ],
        "chat":[
             {"id":"chat-server-1", "host":"127.0.0.1", "port":6050},
             {"id":"chat-server-2", "host":"127.0.0.1", "port":6051},
             {"id":"chat-server-3", "host":"127.0.0.1", "port":6052}
        ],
        "gate":[
           {"id": "gate-server-1", "host": "127.0.0.1", "clientPort": 3014, "frontend": true}
        ]
    },

pomelo start로 시작하면lib/master/master.js는 우선 관리 서비스로 시작되고 시작 매개 변수는config/master에 있습니다.json에서 로그를 볼 수 있도록 설정합니다.
 [INFO]/node_modules/pomelo/lib/application.js - application inited: "master-server-1"
서비스(서버)는 포멜로가'분포식'을 실현하는 방식으로 모든 서버가 하나의 프로세스에 대응하는 것이 중요한 개념이다.
마스터는 서버에 따라json의 설정, 서버에 대응하는 프로세스를 시작합니다.
위 구성의 첫 번째 서버에 대해 다음과 같이 시작합니다.
cd/Users/wangdy/Projects/pomelo/chatofpomelo-master/game-server && node  /Users/wangdy/Projects/pomelo/chatofpomelo-master/game-server/app.js env=development  id=connector-server-1  host=127.0.0.1  port=4050  clientPort=3050  frontend=true  serverType=connector  locally
서버를 볼 수 있습니다.json의 설정은 사실 시작 프로세스의 매개 변수입니다.각 서버에는 id,host,port,serverType 등의 속성이 있습니다.id는 전역적으로 유일합니다. 여러 개의 서버 Type이 같은 서버가 한 조를 구성할 수 있습니다.
전체 시스템이 사용하는 동일한 프로필은 어떻게 분포식을 실현합니까?
pomelo의 분포식은'다중 프로세스 분포식'이라고 할 수 있으며,lib/master/starter에 있습니다.js에서 볼 수 있듯이 프로세스를 시작하는 방식은 두 가지가 있습니다. sshrun과localrun입니다.
모든 호스트에 디렉터리 구조가 같은 프로그램을 배치하고 마스터 호스트와 마스터 호스트가 아닌 ssh 에이전트 forward를 설정합니다.master 프로그램이 시작될 때host 속성을 판단합니다.host가 로컬이면localrun을 통해 직접 시작하고,host가 로컬 호스트가 아니라면ssh 원격 로그인을 통해 시작합니다.
서버 프로세스가 시작된 후에 응용 프로그램의 실례 앱을 만들고 유지합니다. 앱은 기본적인 설정과 구동 인터페이스를 제공하는 것 외에 서비스 프로세스의 상하문 역할을 합니다.앱에서 구성 요소 (component) 를 통해 각종 기능을 실현합니다.
구성 요소 대상은 앱 대상의components 속성에 저장되고lib/util/appUtil에 저장됩니다.js의loadDefaultComponents 방법에서 앱이 기본적으로 불러오는 구성 요소를 볼 수 있습니다. 예를 들어connection,connector,session,localSession,channel,server,monitor 등입니다.그 중에서 서버 구성 요소는 가장 핵심적인 고객 요청 처리 기능을 완성한다.
서버 구성 요소(lib/components/server.js)는 구성 요소의 start,stop 인터페이스를 간단하게 실현했을 뿐, 구체적인 기능은 속성 서버 대상에 의해 실현된다(lib/server/server.js).
Server 객체의 구조 함수:
var Server = function (app) {   this.app = app;   this.filterService = null;   this.handlerService = null;   this.state = ST_INITED; };
그 중에서handlerService 속성은 HandlerService 대상(lib/common/service/handleService.js)을 저장합니다. 이 대상은 우리가 작성한 클라이언트 요청을 처리하는 xxxHandle를 불러오고 관리합니다.js, filter 서비스는 Filter 서비스를 통해 filter 대상을 관리합니다.
미완성

좋은 웹페이지 즐겨찾기