erlang - 장점 - 액터 모델 단점




액터 모델 및 충돌 감지 (2)

Erlang에서 서버를 사용하는 우주 기반 게임이 있습니다. 트릭은 각 위치 / 노드 / etc도 배우라는 것입니다. 물리학을 지속적으로 실행하고 정기적으로 각 게임 엔티티 배우에게 정보를 전송합니다.

배우 / 실체가 무엇인지에 대해 더 추상적으로 생각하기 시작할 때 모든 것이 훨씬 더 명확 해집니다. 예를 들어 충돌은 완전한 본격적인 액터가 될 수 있습니다. 이렇게하면 클라이언트 측이 훨씬 쉽게 그래픽과 사운드 효과를 충돌에 연결합니다. 서버 측에서는 주어진 시간에 두 개의 엔티티간에 여러 충돌 효과가 두 번 이상 발생하는 것을 방지합니다.

나는 게임 서버를위한 Erlang의 가능성에 대해서 생각하고있다. (오, 내가 Erlang 전문가가 아니고, 단지 무대를 고려하고있다) 이것은 게임 시뮬레이션을 위해 액터 모델 을 사용한다는 것을 의미합니다. 물론 가장 큰 매력은 동시성이 여러 노드에 분산되어 있다는 것입니다.

현재 가장 큰 문제는 충돌 감지와 같은 다중 액터 상호 작용을 어떻게 수행해야 하는가입니다. (이것은 단지 예일 뿐이다)

충돌 탐지는 본질적으로 모든 게임에서 필수적이지만 액터 모델의 특성상 필수적이지만 모든 대상 액터에 대해 전역 적으로 동기화 된 상태 쿼리 및 업데이트가 필요하기 때문에 효율적으로 보이지 않으며 심지어 이해가되지 않습니다. 동기화를 사용하면 Erlang의 액터 모델의 모든 이점을 무시합니다.

물론 스페이스 파티셔닝을 올바르게 사용하면 한 번에 액터를 대상으로하는 작업을 줄일 수 있습니다. 아니면이 질문에 대한 정답입니까? 상호 작용하는 액터의 수를 줄임으로써 동기화 범위를 줄입니까?


작은 부분으로지도를 분할하고 각 부분을 자체 프로세스로 만들 수 있습니다 (각 타일을 고유 한 프로세스로 너무 많이 분할 할 수도 있습니다). 이동을 시도하는 플레이어는 타일 / 서브맵에 메시지가 전송 될 것이라고 말하고, 타일이 괜찮 으면 응답합니다. 이렇게하면 한 번에 하나의 메시지 만 타일 / 서브맵에서 처리되기 때문에 충돌을 피할 수 있습니다. 여러 개의 하위 맵 / 타일이 동시에 메시지를 처리 ​​할 수 ​​있으므로 여전히 동시 프로그램입니다.







actor-model