클라이언트 : 접속된 각각의 유저
서버 : 클라이언트의 요청을 받는 서버
각 클라이언트는 모두 서버와 연결되어 있습니다.
여기서 동기화란? 어느 한 쪽의 값이 달라졌을 때 양쪽의 값을 모두 바꾸는 행동을 취하는 것.
기본적으로 서버는 하나이지만 클라이언트는 여러 개일 수 있습니다. 즉, 서버-클라이언트 관계는 위의 사진과 같이 1:n의 관계입니다.
서버에서 특정 Property의 값을 바꾸면 그 Property를 갖고 있는 클라이언트의 Property 또한 전부 값이 변경됩니다.
반면 클라이언트에서는 독자적으로 값을 바꿔도 다른 클라이언트나 서버에 영향을 미치지 않습니다. 이유는 서버와 클라이언트에 저장된 각각의 엔티티는 네트워크로 연결되어 있으나 엄연히 다른 엔티티이기 때문입니다.
-> 이해를 쉽게 하기 위해, 서버는 하나고 클라이언트는 철수 민호 영희 가 있다면
서버에서 0->1 로 바꾸면 철수, 민호, 영희 모두 0->1 로 변경됨.
그러나 철수가 1->2로 바꾼다고 민호, 영희가 모두 바뀌는 것은 아니다.
*Property
만약, 클라이언트에서 변경한 Property의 값이 서버에도 반영된다면 어떻게 될까요?
서버-클라이언트 관계는 1:1이 아닌 1:n의 관계이기 때문에 서버에 과부하가 오게 됩니다.
따라서 동기화는 서버 → 클라이언트 단방향으로 진행됩니다.
- Client : 서버가 클라이언트의 함수를 호출하면 서버와 연결된 클라이언트들에게 함수 호출을 요청하고, 연결된 클라이언트들에 있는 함수가 실행됩니다.
- ClientOnly : 클라이언트에만 불릴 수 있으며 서버에서는 부를 수 없습니다.
- Server : 클라이언트 쪽에서 서버의 함수를 호출하면 서버 쪽에 신호를 보내 서버 안에서 함수가 실행되게 합니다.
- ServerOnly : 서버에만 불릴 수 있고, 클라이언트에서는 부를 수 없습니다. 대부분의 로직는 서버에서 서버 기준으로 짜게 됩니다. 즉, 로직은 주로 서버 위주의 행위를 많이 하게 됩니다.
- Multicast : 서버와 클라이언트 양쪽 모두 실행합니다.
*wait(2)을 써주지 않았을 때 CLIENT 뒤에 파라미터로 받은 문자열이 출력되지 않는 현상 발생하는 이유
⇒ 서버에서 엔티티를 생성하고 클라이언트에도 엔티티가 생성되기까지 시간이 걸립니다. 클라이언트에서 엔티티가 생성되는 도중에 서버에서 엔티티의 값을 넣어 전송하면 클라이언트에서 값을 받지 못하는 현상이 발생합니다. 이를 타이밍 이슈라고 합니다.
실제로 이렇게 했을 때,
로그 출력은
Begin play
Server
END
Client
가 된다. (밑에 사진 참고)
이유는
서버에서 client 함수를 실행하게되면, client 한테 함수에 대해 보내고 그 동안 서버는 그 밑에 동작들을 계속 사용한다.
그렇기 때문에 Server -> End ->. Client 순서로 실행되게 되는 것이다.
자 이렇게 되면 출력은 어떻게 될까?
BEGIN PLAY -> SERVER -> Multicast -> END -> Client -> Multicast
설명 ) client 에게 요청을 하고 그 동안 multicast 실행을 하고 얘도 client 한테 보내
그리고 end 진행하고 그 다음 첫번째 요청에 대한 답 client , 그 다음 Multicast 출력
* 정리
서버가 흐름을 관장하고 클라이언트는 서버에서 받아온 것을 보여줍니다.
서버에 엔티티가 생성이 됐을 때 그 엔티티들이 각 클라이언트 내에도 생성이 됩니다.
특정 클라이언트 안에서 생성된 엔티티는 그 클라이언트 안에서만 생성됩니다.
[특정 클라이언트 안에서만 생성되는 엔티티의 대표적인 예]
- UI
- 입력
- effect - effect의 경우 보통 서버로 제어하는데 특정 클라이언트에서만 연출하고 싶을 땐 로컬 엔티티를 사용합니다.
- 최적화 - 서버에 엔티티가 너무 많을 때 비용 때문에 최적화 시 로컬 엔티티를 사용합니다.
effect 같은 경우는 충돌이라고 생각을 하면, 그게 다른 유저들한테도 다 보여야 하지만 특정 클라이언트에게만 보여야 하는 충돌도 있기 때문에 이런 상황에서는 local 엔티티를 사용한다.
'MapleStory Worlds Super Hackathon > 기본 개념' 카테고리의 다른 글
MapleStory World - Event (1) | 2022.09.23 |
---|---|
MapleStory World - 기본 문법 (1) | 2022.09.23 |
Maple Story World - Component (1) | 2022.09.21 |