pomelo 학습 노트(1) 기본 개념
먼저 포멜로의'분포식'에 대해 알아보겠습니다.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 대상을 관리합니다.
미완성
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
조밀한 게임을 Scratch로 만들어 보았다. 그 1.2021년 1월 7일에 스가 총리가 긴급 사태 선언을 발령했습니다. 역시 「밀」이 좋지 않은 일이라고, 재차 생각했으므로 넷에서 보인 명작 을 마음대로 흉내내 Scratch로 만들어 보았습니다. <완성 이미지> 링크...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.