현제의 현재이야기

[넥슨/MOD] 네트워크의 이해 본문

MOD

[넥슨/MOD] 네트워크의 이해

현재의 현제 2022. 7. 18. 15:52

보통은 동기화 문제를 해결하기 위해서 다른 쪽도 바꿔주는 번거로운 작업을 진행하였으나 MOD에선 실행제어 라는 것이 있다.

 

property 실행제어

동기화는 서버 -> 클라이언트 단방향으로 진행

[sync] : 동기화 되는 property

[none] : 안되는 것

 

서버와 클라이언트

 

일반적으로 프로퍼티와 함수를 선언하면 서버와 클라이언트 각각 생성되고, 서로 독립되게 움직임.

MOD에서는 자동으로 동기화됨. 서버가 바뀌면 클라이언트가 바뀐다.(단방향 구조)

 

효율적인 실행 제어

 

원래는 서버: 효과음을 내시오 - > code47 -> 클라이언트 code-47 -> 효과음을 내시오

이렇게 인데 이것을 함수로 만들어버리면 

서버 playsoundeffect() - > 클라이언트 playsoundeffect() 해버린다.

단 그럴 댄 Playsoundeffect()에는 if 서버면 클라이언트의 playeffectsound를 실행하라, elseif 클라이언트면 playeffectsound 처러 ㅁ두 개의 조건인 분기문을 사용해야 한다. 그렇지만 이는 효율적이지 않기에 MOD에는 각 함수마다 호출 및 실행공간을 설정 가능하다.

 

[ServerOnly]
void CallPlaySoundEffect()
{
self:PlaySoundEffect()  -- 어떤 공간에서든 같은 공간의 함수를 호출하듯이 사용할 수 있다.
}
[client] --각 함수별로 어떤 공간에서 호출하고 실행할지를 설정할 수 있다.
void PlaySoundEffect()
{
--코드 작성 공간입니다.
}

 

function 실행 제어

function setting 들어가면 다음과 같은 setting을 할 수 있음.

 

client: 서버 -> 클라이언트, 서버와 연결된 클라이언트들에게 함수 요청

clientOnly: 클라이언테에만

server: 클라이언트 -> 서버, 서버 안에서 함수

serveronly: 서버 안에서만, 대부분의 로직

로직을 서버에서만 하는 이유 : 클라이언트에서 로직을 처리하고 서버에서 동기화 통신용으로만 사용하면 유저가 해킹을 한 결과가 모든 클라이언트들에게 전달되기 때문. -> 해킹에 취약한 상황

multicast: 양 쪽 실행. 그러나 이도 sever에서 client 방향으로 간다.

 

파라미터를 넘겨줄 수 도 있음.

 

프로퍼티 동기화

동기화가 안되면 다른 프로퍼티이다. ex) 스탯 컴포넌트의 hp가 줄면 서버만 줄고 클라이언트 프로퍼티에는 갱신이 되지 않는다.

동기화 또한 서버 -> 클라이언트로 진행

동기화는 약간의 시차가 발생. 동기화 됐을 때 발생하는 함수는 OnSyncProperty 함수

동기화 방법 : [sync] 되어 있으면 되고 있는거.

Comments