https://stackoverflow.com/questions/4470645/acceptex-without-wsaioctl 다른 질문에서 보내주신 링크로 들어가서 확인 했습니다. 추가적으로 제가 이해한 부분이 맞는지 확인해주시면 감사하겠습니다. 기본적으로 AcceptEX, ConnectEX 함수등은 아키텍처가 외부에 있기에 많은 비용이 발생하여 맵핑하여 사용한다고 생각이 듭니다 이것을 제외하고 추가적인 부분이 있을까요?
강사님 안녕하세요, 우선 유튜브와 인프런 강의들을 정독하면서 최근에 많은 도움을 받고 있습니다. 질 좋은 강의 만들어주셔서 정말 감사합니다. 이번 강의를 들으며 두 가지 궁금증이 생겼습니다. DNS 서버는 ISP에 딸려 있는 것이 아닌 모든 웹 사이트에 존재하는 것일까요? 구글의 DNS는 8.8.8.8인 것은 알고 있었는데, 생각해보니까 다른 사이트의 IP주소를 알려주는 역할을 구글이 왜 하고 있는 것인지 궁금합니다. host 파일 관련해서, DNS 서버는 IP주소를 알려줄 때 유효기간도 같이 알려준다고 하셨는데, host 파일에 저장된 IP주소도 당연히 해당 유효기간의 영향을 받는 것이라고 생각해도 될까요?
정말 기초적인건데 갑자기 이해가 안돼서 질문 남깁니다. AccountManager.h에서는 pch.h가 include되어 있는지 모르고 AccountManager.cpp에만 include되어 있는데 어떻게 AccountManager에서는 map에 std::를 안붙이고 쓰고, int32 타입을 쓸 수 있는걸까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 강의 잘 보고 있습니다, 다름 아니라 Symmetric NAT는 세션마다 External Port를 부여한다고 하셨는데 , 하나의 Local IP , Local Port가 두 개의 다른 Remote IP 와 Remote Port에게 각각 패킷을 보내서 Outbound가 발생하면 NAT table에 아래와 같이 매핑되는지 궁금합니다. Local IP L.Port E.Port RemoteIP Remo.Port 192.168.0.10 3000 8080 15.15.15.15 5555 UDP 192.168.0.10 3000 8081 15.15.15.14 4444 UDP L.port -> Local Port E.port -> External Port 글쓰는 창이 좁아 형식이 이상한점 죄송합니다. 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] referer는 아무리 오타여도 이미 고칠 수 없을 정도로 퍼져, 그대로 사용한다는 것은 이해했습니다. 그러나 중간중간 나오는 (ex, Date) 중간에 바뀌었다는 것들은 어떻게 바뀔 수 있었던건가요? referer처럼 널리 퍼져서 바뀌기 힘든 것과, 널리 퍼지지 않은 것의 차이인가요?
[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버
안녕하세요 루키스님 강의를 듣다가 이해가 잘 되지 않는 부분이 있어서 질문드립니다!! 병합 정렬의 MergeResult() 에서 아래 코드가 잘 이해가 안되는데요..! 왜 v[left] = temp[i] 가 아니라 v[left + i] = temp[i] 인건가요..?? // temp 에 넣어준 걸 원본에 덮어쓰기 for (int i=0; i<temp.size(); i++) v[left + i] = temp[i];
데드락 관련해서 버그가 떠서 질문글을 남깁니다. 윈도우 어플리케이션을 생성해서 윈도우 메인에 서버에게 C_LOGIN을 보내는 패킷을 생성했습니다. 밑은 해당 코드입니다. bool flag = true; while (true) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { if (WM_QUIT == msg.message) break; if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } else { CEngine::GetInst()->progress(); CEditorObjMgr::GetInst()->progress(); ImGuiMgr::GetInst()->progress(); // 렌더 종료 CDevice::GetInst()->Present(); if (service->GetCurrentSessionCount() > 0 && KEY_RELEASE(KEY::A) && flag == true) { Protocol::C_LOGIN pkt; auto sendBuffer = ServerPacketHandler::MakeSendBuffer(pkt); sendBuffer = nullptr; flag = false; } } } return (int) msg.wParam; } A를 클릭해서 서버와 연결한 후에 X를 눌러서 윈도우 창을 닫았는데, 이후 이렇게 코어글로벌이 종료될 때, GSendBufferManager를 delete하는 부분에서 타고타고 들어가서 DeadLockProfiler가 DeadLock이 존재했다고, 알려줬습니다. Server에 OnConnected가 되었을 때, 패킷을 보내면 이런 문제가 일어나지 않았는데, 원하는 때, 원하는 키를 입력해서 패킷을 보내려고 하니까 문제가 일어나네요 ㅜㅜ 문제를 알 수 있을까요? 프로토 버퍼를 사용해서 주고 받고 있습니다!
안녕하세요 루키스님. 제가 비쥬얼 스튜디오에서 윈도우 어플리케이션을 만들어서 DX11포폴을 만들고 서버를 연동하려고 시도중입니다. 이 상황에서 wWinMain에 ClientServiceRef service = MakeShared<ClientService>( NetAddress(L"127.0.0.1", 7777), MakeShared<IocpCore>(), MakeShared<ServerSession>, // TODO : SessionManager 등 1); ASSERT_CRASH(service->Start()); GThreadManager->SetFlags(1); for (int32 i = 0; i < 2; i++) { GThreadManager->Launch([=]() { while (true) { service->GetIocpCore()->Dispatch(10); } }); } //밑은 DX11을 작동시켜주기 위한 함수들입니다. while (true) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { if (WM_QUIT == msg.message) break; if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } else { CEngine::GetInst()->progress(); CEditorObjMgr::GetInst()->progress(); ImGuiMgr::GetInst()->progress(); // 렌더 종료 CDevice::GetInst()->Present(); } } 이렇게 쓰레드를 생성해서 작동을 시켜주었습니다. 그런데 생성된 게임 윈도우에서 X키를 눌러서 프로그램을 강제로 종료시켰는데, 이 메인 쓰레드 자체는 정상적으로 WM_DESTROY를 호출 받아서 종료되었는데, 멀티 쓰레드들이 멈추지 않고 계속 돌아 프로그램이 종료되지 않고, 좀비처럼 살아남는 현상이 계속되고 있습니다. 쓰레드를 강제로 종료시키니 메모리 릭이 남고, 어떻게 문제를 해결해야할지 해결책을 찾지 못해서 이렇게 질문 남깁니다. 참고) 루키스님의 패킷 직렬화#3 코드를 참조해서 만들고 있습니다! 감사합니다.
1) 제가 제대로 비동기 방식을 이해한게 맞는지 궁금합니다. 비동기 방식이 어떤 함수를 호출한다면 함수를 지금 바로 처리하지 않고 예약같은 개념으로 요청한 함수를 나중에 처리하고 그동안 요청한 함수외에 다른 부분을 실행하는걸로 이해를 했는데 맞는건지 궁금합니다. 2) 만약에 제가 이해한 방식대로 비동기가 진행이 된다면 수업에서 진행한 ::WSAWaitForMultipleEvents(1, &wsaEvent, TRUE, WSA_INFINITE, FALSE); 코드에서 블로킹 방식처럼 진행하는데 이 부분은 비동기와는 맞지 않는 부분아닌가요??
강의에서 캐시의 조건을 설정할 때 no cache, no store, must-revalidate 셋을 모두 설정해야한다고 하셨습니다. 그래서 제가 스프링(spring boot말고 그냥 spring입니다)에서 WebContentInterceptor에 CacheControl 클래스로 조건을 설정하려고 했습니다. @Bean public MappedInterceptor webContentInterceptor() { String[] includePatterns = {"/board/game/**"}; WebContentInterceptor wci = new WebContentInterceptor(); CacheControl cacheControl = CacheControl.noCache(); wci.addCacheMapping(cacheControl, "/**"); return new MappedInterceptor(includePatterns, wci); } 그런데 CacheControl에서는 no cache와 no store를 동시에 설정을 할 수 없었습니다. https://github.com/spring-projects/spring-framework/issues/18354 위 링크에서 글을 보면 no store가 이전 브라우저에서 동작하지 않는 것을 확인하지 못했다고 말을 하고 있는 것 같습니다. 그래서 no cache와 no store 둘을 같이 사용할 일이 없다고 하는 것 같아서요. 아니면 제가 직접 response를 건드려서 no cache와 no store를 둘 다 설정해야만 할까요?
강의에서는 대용량 트래픽이 발생할 요청에는 stateless로 설계하라고 말씀하셨지만 실제로는 로그인 정보나 그외 등등을 유지하고 있잖아요. 그럼 반대로 평소에 stateful하게 관리하다가 이벤트 페이지등 대용량 트래픽이 발생할 때 stateless하게 관리되는 정보들은 무엇무엇이 있나요?
Job Queue #2의 영상을 보고 질문드립니다. 이 영상을 보고 저번에 메모리 관련해서도 보고 느낀 것인데, 템플릿 흑마법을 따로 공부할 수 있는 책이나 가이드가 있을까요? 루키스님의 영상을 볼 때는 템플릿 흑마법이 이해가 가긴 하는데, 이걸 스스로 짤 생각을 하니 도저히 엄두가 안나서 공부가 필요할 것 같아 이렇게 질문 글을 남깁니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 웹 브라우저 주소창에 url 을 입력하면 웹브라우저가 http get 메시지 를 만들어 준다는 건 알겠는데 form(get) 태그나 a 태그 같은 것들은 get 방식의 http 메시지를 만들때도 역시 url 을 만들고 메시지를 보내는 건가요? (같은 get 방식이니까 url 로 넘어가나 해서요....) 그러면 이때 태그 정보 중 리소스의 위치 말고 앞에 도메인 같은 것들은 url 만들어 질 때 자동으로 추가되는 건가요 ?