Invoke의 역할이 이해가 가지 않습니다.
_onAcceptHandler.Invoke(args.AcceptSocket);
이 코드가 어떤 일을 수행하는 것인지, 왜 필요한 것인지 잘 이해가 가지 않습니다...
_onAcceptHandler가 args.AcceptSocket을 수행하도록 하는 것인가요?
답변 1
3
우선 Action과 delegate 문법을 잘 이해하고 계신 것이 맞을까요?
위 부분은 C++로 치면 함수 포인터, 혹은 std::function과 유사합니다.
기본적으로 멤버 변수로는 int, float, bool 같은 데이터를 담는게 일반적이지만,
경우에 따라 '함수' 그 자체도 인자로 받아주면 굉장히 유용한 경우가 많습니다.
예를 들어서 클라 연결이 들어오면, [ ] 함수를 호출 해주겠다!
라는 우리만의 규칙을 정한 다음, [ ] 함수만 바꿔치기 할 수 있다면
[클라가 연결이 들어올 때 어떻게 처리할 것인지] 라는
서버 정책을 나중에 정할 수 있게 됩니다.
즉 [ ] 함수를 인자로 받아서, 그 부분을 호출하는 식으로 만들어주면 되는 것이고
이게 바로 콜백 함수의 장점이자 _onAcceptHandler의 역할입니다.
즉, 위와 같이 클라가 연결하면 호출할 함수를 인자로 받아주는 것이죠.
굳이 ServerCore에서 바로 처리하지 않고,
처리할 함수를 따로 받아주는 이유는
나중에 컨텐츠 단에서 이것을 유연하게 정할 수 있도록 하기 위함입니다.
Action<Socket> 으로 변수를 만들어 주면,
사실상 void를 리턴하고 Socket을 인자로 받아주는 그 어떤 함수도 호환이 됩니다.
void Test(Socket socket); // < OK
void Hello(Socket socket); // < OK
void Sorry(); // << NO ! 함수 시그니처가 다름
참고로 C++로 치면 std::function<void(Socket)> 혹은 void(*)(Socket)에 해당합니다.
1
그러면
_onAcceptHandler.Invoke(args.AcceptSocket);
이 부분은 accept된 클라이언트가 있으면 앞에 핸들러에 등록한 함수들을 실행하는 부분인 것이죠?
TLS 질문드립니다.
0
61
2
SpinLock과 컨텍스트스위칭에 대해 질문 남겨요.
0
61
2
Unity Span
0
88
2
XML, Dll 차이점
0
120
2
Session 질문입니다
0
87
1
Write Read 커서 키워드
0
82
1
더미 클라이언트 수에 따른 OnDisconnect 발생
0
79
2
네트워크 Send 전담 스레드 배치
0
106
2
UnhandledException 으로 서버 터지는 경우
0
96
2
컨텐츠 단, 엔진 단
0
113
1
질문 있습니다
0
84
2
C# 게임서버 3D MMORPG
0
156
2
유니티6 버전
0
101
2
receive하는 부분과 send하는 부분의 차이
0
142
2
커서의 위치의 중요성
0
107
2
C++ 전혀 모르는데 C# 서버
0
172
2
강의에 질문이 있습니다
0
90
2
멀티스레드 이해도 질문
0
100
1
500 vs 500
0
134
3
OnAcceptHandler 액션 함수
0
65
1
이 정도 서버의 객관적인 수준이 궁금합니다.
0
197
2
36. Serialization #3 에서 string (name) 코드 수정 질문
0
84
2
외부 컴퓨터와의 통신 방법이 궁금합니다
0
109
1
스핀락 질문.
0
113
2





