Lotou는 Golang에서 구현 된 게임 서버를위한 가벼운 프레임 워크입니다. 메시지 교환을 추상화하여 다중 노드와 멀티 서비스를 쉽게 달성 할 수 있도록 노드 간의 통신을 활용합니다.
Lotou는 Cloudwu가 작성한 프레임 워크 Skynet에서 영감을 받았습니다. 이 프레임 워크 내에서 모든 서비스는 메시지를 통해 서로를 전달합니다. 서비스가 제공하는 기능은 API 통화에 의해 노출되지 않습니다. 현재 버전에서 Module Core는 메시지 라우팅을 담당하며 모든 서비스에는 수신 및 전송에 대한 자체 메시지 Chan이 있습니다.
핵심은 서비스 간의 커뮤니케이션을 제공합니다. 모든 서비스는 core 에 등록되어 있으며 Core.Send로 다른 사람에게 메시지를 보냅니다.
binary 서버와 클라이언트 간의 통신을 위해 이진 스트림으로 데이터를 인코딩합니다. 이 인코딩 컨벤션의 사용은 JSON 마샬링의 사용과 다소 다릅니다.
Gob (Golang의 자체 Lib에서 Gob가 아님) Gob 인코딩은 노드의 통신을 유지하는 것을 목표로합니다. 서비스의 통신은 트랜스 노드 일 수 있으므로 이진 스트림으로 인코딩하는 메시지가 필요합니다. 더 나은 성능을 위해 노드 내에서 메시지 전환을 인코딩 할 필요는 없습니다.
골랑의 모든 원시 유형은 인코딩 될 수 있습니다. 발신자와 수신기가 동일한 서명을 준수하는 한 모든 매개 변수 조합이 쉽게 지원됩니다.
자체 정의 된 구조물도 지원할 수 있지만 구조물은 고급에 등록되어야합니다. 다른 노드가 동일한 구조물을 사용해야하는 경우 해당 스트러크의 등록은 고정되고 고유 한 순서로 등록되어야합니다.
현재 슬라이스와지도의 공연을 인코딩하는 것은 그리 좋지 않습니다. []interface{} 의 유형을 인코딩하기 위해 각 요소는 별도로 인코딩됩니다. 보다 구체적으로 각 요소에 대한 유형 정보가 모두 마샬링됩니다. 따라서 하나의 동일한 유형의 요소가 있으면 유형 정보가 중복적으로 마샬링됩니다.
GOB (LOTOU)의 마샬링은 반영에 의해 달성됩니다.
로그 모듈은 디버그 및 오류 정보를 인쇄하기위한 것입니다. 현재 로그는 동기화 된 모드이며, 파일에 도전 해야하는 로그가 너무 많으면 기본 논리를 차단할 수 있습니다. (언젠가는 비동기 모드로 변경 될 수 있습니다)
네트워크는 TCP의 노드 간 경로를 구현합니다. server 와 client 의 역할은 그들이 호출되는 것으로 작동합니다. 하트 비트는 아직 구현되지 않았습니다. client 메시지를 처음으로 보내는 시간에 server 에 대한 연결을 설정합니다.
다중 노드 서버는 Topoloy를 기반으로합니다. LOTOU에는 두 가지 유형의 노드가 있으며 다른 유형의 노드가 동일한 네트워크에 포함됩니다. 특정 네트워크에는 하나의 마스터 노드 및 서버 슬레이브 노드 만 있습니다. 서비스는 모든 유형의 노드에서 실행할 수 있으며 지역 서비스와 글로벌 서비스의 두 가지 유형이 있습니다. 로컬 서비스는 이름으로 서로 알려진 동일한 노드 내의 서비스입니다. Global Service는 다른 노드에 의해 실행되는 서비스이며 마스터에 등록되어 모든 노드의 모든 서비스에 노출됩니다.
LOTOU 개발에 관심이 있으시면 언제든지 저에게 연락하십시오.
QQ 157621271
wechat id daijun_1234.
QQ Group도 사용할 수 있습니다 Lotou .
트위터 @sydnash1
조언과 괴짜는 항상 환영합니다.
etcd Service Discover로 사용하십시오.
nats 노드 메시지로 사용하십시오.