해결된 질문
작성
·
301
0
안녕하세요 영상 4분쯤에 나오는 RegisterConnect 에 대해 질문이 생겨서 남겨봅니다.
먼저 제가 이해한 바를 정리해 보면
클라이언트 -> 서버 연결의 경우에는,
DummyClient 입장에서 서버에 붙어야 하기에 RegisterConnect를 호출해 주었고
Server입장에서는 Listener에서 ProcessConnect를 바로 호출해 준다고 이해했습니다.
이전에 서버 -> 서버간의 연결이 분산 서버 환경에서 일어날 수 있다고 말씀주셨고 영상 4분쯤(RegisterConnect 함수 제작 중)에 서버와 서버를 연결할 경우, 상대방이 나한태 붙는 개념이라, ServiceType이 Client 인 경우에만 RegisterConnect 를 호출할 수 있다 설명해 주셨는데 이 부분이 잘 이해가 가지 않습니다.
만약 서버 -> 서버의 연결의 필요해 지는 경우에는,
서버입장에서 ClientService 를 생성해서 대상 서버에 RegisterConnect를 호출해야 하는 건가요?
아니면 따로 추가 함수 제작이 필요한 건가요?
==========================
죄송합니다 추가로 질문 하나 더 남겨봅니다.
저희가 사용하고 있는 IocpEvent는 OVERLAPPED를 상속받아
메모리 처음 시작 부분에 OVERLAPPED 구조체 정보가 들어있어서 IocpEvent <-> OVERLAPPED 간의 타입캐스팅이 가능했었는데,
이런 방식의 기믹은 뭐라고 하며, virtual 함수가 없는 이상 언제나 안전하게 사용할 수 있는 방법인가요?
https://stackoverflow.com/questions/22404423/c-pod-struct-inheritance-are-there-any-guarantees-about-the-memory-layout-of
관련 내용을 찾다보니 메모리 레이아웃이 보장되지 않는다는 내용이 보여서 여쭤봅니다.
답변 1
2
서버입장에서 ClientService 를 생성해서 대상 서버에 RegisterConnect를 호출해야 하는 건가요?
네 그렇습니다. 서버끼리 통신하더라도 그 중 하나는 클라의 역할을 하게 되겠죠.
메모리 처음 시작 부분에 OVERLAPPED 구조체 정보가 들어있어서 IocpEvent <-> OVERLAPPED 간의 타입캐스팅이 가능했었는데,
제 환경에선 문제가 없었지만
테스트한 환경에서 문제가 된다면 더 직관적인 대안은
상속구조를 하지 않고 모든 애들을 커버하는 struct를 만든 뒤,
Overlapped 멤버변수를 넘기는겁니다.
ex)
struct OverlappedEx
{
... 이벤트 종류 구분 등등
Overlapped overlapped;
}
답변 감사합니다!