Skip to content
This repository was archived by the owner on Jun 14, 2022. It is now read-only.

Latest commit

 

History

History
28 lines (20 loc) · 1.62 KB

inter_server_queue.md

File metadata and controls

28 lines (20 loc) · 1.62 KB

서버간 통신 - EngineAPI.InterServerQueue

개요

다른 서버 프로세스에 메시지를 보낼 수 있습니다.

이것을 직접 사용해서 게임 로직을 만들기에는 번거롭고 복잡할 것입니다. 메시지를 수신할 서버 프로세스를 EngineAPI.CurrentProcessUniqueId 를 통해 얻는 고유 식별자를 통해 지정하기 때문입니다.

대신 서버간 통신 - 세션 핸들러에게 메시지 보내기를 활용하십시오.

사용법

Post로 메시지를 보내면, 대상 프로세스에서 AddHandler로 설정했던 메시지 핸들러가 호출됩니다.

핸들러 메서드는 Task가 아니라 void를 리턴합니다. 따라서 핸들러 메서드 안에서 await할 수 없는데, 이것은 의도적인 것입니다. 메시지를 수신하는 루프가 프로세스별로 단 하나만 있기 때문에, 메시지 핸들러가 즉시 리턴하지 않고 오래 기다리면 InterServerQueue를 사용하는 모든 시스템의 시간당 메시지 처리량이 떨어지기 때문입니다.

핸들러 메서드 안에서 await가 필요하면, 메시지를 처리하는 파이버를 EngineAPI.Fibering.BeginQueueAttachedFiber를 통해 생성하고, 수신한 메시지를 이 파이버에 큐잉해서 처리하기를 권장합니다.

EngineAPI.InterServerQueue를 확장해서 서버간 통신을 구현한 예제가 샘플 리파지터리의 InterServerMessaging에 있습니다.

구현

서버 프로세스별 큐가 하나의 Redis LIST입니다. 새 메시지가 들어왔는지 짧은 시간 간격으로 폴링합니다.